游戏并发量较大,主要有三方面需要特殊处理:并发,nio以及持久化.今天将自己项目开发中的多线程心得总结一下,入门不久,希望多交流指导.目前开发中处理并发主要用到一下方法:
-
synchronized.有锁定对象或者锁定mutext(互斥量),例如世界boss中血量的修改,所有玩家共享一个血量;
- 将客户端请求放入队列中,队列有单线程处理(executors.newSingleThreadExecutor).由于队列的先后顺序避免了加锁.例如在注册需要检查登录名字是否重复,将所有注册登录请求放入一个队列中处理;
- 每个玩家一个锁.维护一个map(playerid,playerMutex)。需要操作本玩家数据时需要先获取到该锁,玩家自身登陆时候也需要获取倒锁。充值和加入帮会都用这种方法处理(因为其它玩家会修改本玩家账户或者本玩家帮派属性)。特别地,为减少蝗虫玩家数据,我们会清理掉离线一定时间玩家缓存数据,同时使用redis分布式缓存需要共享给其他玩家的数据(如本人战斗力,领地资源点等),这里也使用了玩家锁;
- volatile:判断玩家是否拥有军团是通过玩家(PlayerEntity)的域变量legionId!=0完成,这里设置成volatile,不要编译器优化,需要变量每次都去主存获取,保证可视化;
- CAS:数据库自增长开销较大,我们将自增长放置到缓存中进行,数据只处理插入操作。玩家id(playerid)的获得即通过redis 的incr()方法,其会对redis中的id加1,并返回最新的一个id
- AtomicInteger:是CAS一个具体事例,保证原子性操作,项目中有几个线程修改时用到其中的getAndAdd以及get方法。
- reentrantLock,在await时这个锁是会释放的.同时可以tryLock尝试获取锁.提供比synchronized更细粒度的控制,当前项目中还具体使用.
欢迎留言指导.有更新会继续更新.谢谢!
主要参考书籍<java并发编程实战><Think in Java><Efficient Java>
相关推荐
JAVA开发Java多线程与线程安全实践-基于Http协议的断点续传
Java 开发JAVA多线程与线程安全实践-基于Http协议的断点续传
这是我在大一写的Java基础二级实践课题,里面有我自己写的报告和课题一步步写下来的思路和方法,里面基本上java基础的知识都用到了,例如java的多线程,还有继承,在这个课题中继承解决很多代码冗余的问题,还有就是...
1. 多线程下载:项目采用了Java的多线程编程技术,将文件分成多个部分,每个线程负责下载其中的一部分。这样可以充分利用网络带宽,提高下载速度。 2. 断点续传:项目支持断点续传功能,即使在下载过程中出现意外...
服务端知识进行连接 之后调用服务端的线程 服务端并没有大的改动,在原有的基础上加上线程池, 客户端界面只有简单的传一个...调用客户端的方法,方法中有线程,线程中进行socket的链接,这样才能实现多个文件的传输。
本资源包“Java多线程与线程安全实践-基于Http协议的断点续传....通过这个实践项目,学生不仅能够加深对Java多线程和线程安全概念的理解,还能提升解决实际问题的能力,为未来的软件开发工作打下坚实的基础。重新回答||
通过这些高难度问题,您将全面掌握Java多线程编程的核心概念、技术和最佳实践。 每个问题都包含了深入的答案解析,涵盖了多线程编程的各个方面。您将了解线程安全、死锁、线程池、线程上下文切换、线程同步和互斥、...
毕业设计项目开发-Java多线程与线程安全实践-基于Http协议的断点续传.zip
Java 项目,包含:项目源码、数据库脚本、部署说明等,该项目可以作为课程设计使用,前后端代码都在里面。...1. Java,用IDEA 或者 Ecplise 即可 2. 数据库可视化软件,推荐使用它 Navicat,MySql 建议使用 5.7 版本
《精通Java:JDK、数据库系统开发Web开发》全书共分27章,内容涵盖了Java编程环境概述、基础语法、面向对象软件设计方法、线程、数据集合、网络编程、图形编程、多媒体编程以及Java Web开发。本书每一节的例子都是...
Java开发的文章。Tim Peierls是现代多处理器的权威,在BoxPop.biz、唱片艺术和戏剧表演上也造诣颇深。Joseph Bowbeer是一位Java ME专家,他对并发编程的痴迷始于在Apollo计算机上编程的岁月。David Holmes是《The ...
Java 5以及6在开发并发程序中取得了显著的进步,提高了Java虚拟机的性能以及并发类的可伸缩性,并加入了丰富的新并发构建块。在《JAVA并发编程实践》中,这些便利工具的创造者不仅解释了它们究竟如何工作、如何使用...
人工智能-项目实践-多线程-多线程爬虫--抓取淘宝商品详情页URL 本项目是一个Java编写的多线程爬虫系统。此系统与我之前开发的ip-proxy-pools-regularly结合使用,共抓取了淘宝近3000个页面,从中解析到了近9万的...
西南科技大学Java程序设计与实践 实验一、实验目的: 练习面向对象的图形用户界面设计、界面布局、事件设计方 法。 二、实验内容: 设计一个类似Windows计算器的Application应用程序。 三、实验要求: 1、采用Java ...
Java多线程与线程安全实践-基于ttp协议的断点续传毕业论文.doc
整理了一份多线程开发资料, 从名词到原理,再到开发实践,都有, 大家可以从中参考借鉴一些有用的东西。