游戏并发量较大,主要有三方面需要特殊处理:并发,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_Thread.rar"提供了一些Java多线程的实践案例,对于深入理解和应用Java多线程技术具有很高的参考价值。 首先,我们要理解线程的基本概念。线程是程序执行的最小单元,每个线程都拥有自己独立的程序...
在编程领域,多线程是一种常见且重要的技术,特别是在Java这样的多线程支持良好的语言中。本主题聚焦于“西南科技大学”的一个Java综合实验,该实验旨在通过多线程实现阶乘运算。在这个实验中,学生将学习如何利用...
通过实践“火车票问题”,开发者可以深入理解Java多线程编程的概念、同步机制以及在实际场景中的应用。在实际开发中,正确使用多线程技术可以极大地提高程序的效率和响应速度,但同时也需要注意资源竞争和并发控制,...
这是一个很好的实践示例,可以帮助我们深入理解Java图形用户界面(GUI)编程和多线程管理。 首先,Java Swing是Java标准库中的一个组件,用于创建桌面应用程序的用户界面。它提供了丰富的组件集合,如按钮、文本框...
总的来说,这个“Elevator_Java_Develop.zip”项目提供了一个很好的机会,让我们学习如何用Java实现一个功能完备的电梯模拟系统,涵盖了面向对象设计、多线程编程以及图形用户界面的开发。通过深入理解和分析这个...
6. **多线程**:可能用于实现并发的游戏机制,如玩家的行动与游戏环境的同步更新。 7. **文件操作**:保存和加载游戏进度,读写配置文件等。 8. **设计模式**:如单例模式用于全局资源管理,工厂模式用于创建游戏...
Java多线程是Java编程中的重要概念,它允许程序同时执行多个任务,从而提升系统效率。在多线程环境中,变量共享是一个常见的需求,但也是引发问题的关键点。本篇文章将深入探讨Java多线程下变量共享的问题以及解决...
通过分析并实践`threadTest`案例,我们可以深入理解Java多线程的原理和使用技巧,为编写高效并发程序打下坚实基础。同时,也要注意多线程编程中的死锁、活锁和饥饿等问题,合理设计线程间的交互,避免出现不可预期的...
Java中的Socket编程是网络通信的基础,它允许两个网络应用程序通过TCP/IP协议进行数据交换。...通过实践这样的项目,开发者可以深入理解Socket通信机制,掌握多线程的使用,并锻炼解决实际问题的能力。
"java_游戏_源码"明确了这些游戏是用Java编写,并且提供源代码,意味着我们可以直接查看并理解游戏的内部工作机制。最后,“游戏开发”涵盖了从设计概念到实现游戏逻辑的整个过程。 在"www.pudn.com.txt"这个文件中...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,极大地提高了程序的效率和响应性。在Java中,多线程主要通过继承Thread类或实现Runnable接口来实现。本教程《Java多线程编程核心技术》将...
此外,Java中的多线程也是游戏开发中的重要概念,因为它允许同时进行多个任务,如更新游戏状态和渲染图形。通过创建和管理线程,开发者可以使游戏更加流畅,避免因为长时间计算而导致的界面卡顿。 总之,"JAVA小...
Java飞机游戏是一款基于Java语言开发的简单战斗类游戏,它为初学者提供了很好的实践平台,以巩固和深化Java编程知识。在这个项目中,开发者可以学习到如何将理论知识转化为实际应用,同时也能够体验到编程的乐趣。 ...
Java多线程编程是Java开发中的重要组成部分,它允许程序同时执行多个任务,提升系统效率。在本实例源码中,包含17个章节和上百个实例,旨在深入讲解Java多线程的核心概念和实际应用。 一、线程基础知识 在Java中,...
此游戏不仅展现了Java GUI(图形用户界面)的运用,还深入实践了多线程编程技术,为玩家带来流畅的游戏体验。 首先,让我们关注游戏的核心规则——三公。三公是一种在中国广为流传的扑克玩法,其核心在于比较玩家手...
Java多线程设计模式是Java开发中的重要领域,它涉及到如何在并发环境下高效、安全地管理资源和控制程序执行流程。本资料集包含了清晰完整的PDF版书籍和源代码,为学习和理解Java多线程设计模式提供了丰富的素材。 ...
### Java多线程编程大总结 #### 一、Java多线程编程的演进与重要性 Java多线程编程自Java 5之后经历...通过上述知识点的深入理解与实践,开发者可以有效地利用Java的多线程机制,解决实际开发中遇到的各种并发问题。
在Java编程中,多线程通信是构建高效并发应用程序的关键技术。服务器多线程通信尤其重要,因为它允许服务器同时处理多个客户端请求,提高系统资源利用率并优化响应时间。本篇文章将深入探讨Java中的多线程通信,以及...
在Java编程中,多线程是一项关键特性,它允许程序同时执行多个任务,提升系统效率。在处理耗时操作如大文件下载、数据处理或网络请求时,展示进度条能够提供用户友好的交互体验,让使用者了解任务的完成状态。本主题...