JAVA开发需求分析套路_JAVA并发工具常用设计套路示例代码
了解JAVA并发工具常用设计套路
前言
在学习JAVA并发工具时,分析JUC下的源码,发现有三个利器:状态、队列、CAS。
状态
一般是state属性,如AQS源码中的状态,是整个工具的核心,一般操作的执行都要看当前状态是什么,
由于状态是多线程共享的,所以都是volatile修饰,保证线程直接内存可见。
/**
* AbstractQueuedSynchronizer中的状态
*/
private volatile int state;
/**
* Status field, taking on only the values:
* SIGNAL: The successor of this node is (or will soon be)
* blocked (via park), so the current node must
* unpark its successor when it releases or
* cancels. To avoid races, acquire methods must
* first indicate they need a signal,
* then retry the atomic acquire, and then,
* on failure, block.
* CANCELLED: This node is cancelled due to timeout or interrupt.
* Nodes never leave this state. In particular,
* a thread with cancelled node never again blocks.
* CONDITION: This node is currently on a condition queue.
* It will not be used as a sync queue node
* until transferred, at which time the status
* will be set to 0. (Use of this value here has
* nothing to do with the other uses of the
* field, but simplifies mechanics.)
* PROPAGATE: A releaseShared should be propagated to other
* nodes. This is set (for head node only) in
* doReleaseShared to ensure propagation
* continues, even if other operations have
* since intervened.
* 0: None of the above
*
* The values are arranged numerically to simplify use.
* Non-negative values mean that a node doesn't need to
* signal. So, most code doesn't need to check for particular
* values, just for sign.
*
* The field is initialized to 0 for normal sync nodes, and
* CONDITION for condition nodes. It is modified using CAS
* (or when possible, unconditional volatile writes).
*/
volatile int waitStatus;
队列
队列一般由链表实现(单向链表,双向链表),在线程获取不到想要的资源或者状态时,将线程封装成特定节点,扔到等待队列中,等待时机成熟,再从队列中取出,是悲观锁思想。
如AQS中的Node节点,代码太长就不贴了。
CAS
CAS操作是乐观锁思想,是轻量级的并发处理。一般用于对上述状态的修改,而且能保证有且只有一个线程能修改这个状态。
一般由Unsafe类中的compareAndSwap之类的方法实现。使用CAS,往往伴随自旋,如果修改状态失败,则不断地重试,直到修改状态成功。
以上就是java并发编程中的套路,抓住这个思路,想必能在学习中有所帮助。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持码农之家。
以上就是本次给大家分享的关于java的全部知识点内容总结,大家还可以在下方相关文章里找到相关文章进一步学习,感谢大家的阅读和支持。
JAVA开发需求分析套路_JAVA并发工具常用设计套路示例代码相关推荐
- java开发保险案例_Java实现双保险线程的示例代码
双保险线程,每次启动2个相同的线程,互相检测,避免线程死锁造成影响. 两个线程都运行,但只有一个线程执行业务,但都会检测对方的时间戳 如果时间戳超过休眠时间3倍没有更新的话,则重新启动对方线程. 例子 ...
- 【高级Java开发】类QQ聊天工具的设计与实现(代码已上传)
1.要求 类QQ聊天工具的设计与实现,要求如下: 用户可注册并通过密码录登. 用户可通过查找添加自己的好友. 用户可通过好友列表选择好友并与之对话. 需实现聊天记录查看功能. 界面美观大方,交互设计尽 ...
- 用java实现combin函数_Java并发工具类CompletableFuture教程与示例
Java 8带来了大量的新功能和增强功能,例如Lambda表达式,Streams,CompletableFutures等.在本文中,我将通过简单的示例向您详细说明CompletableFuture及其 ...
- Java开发大型互联网高并发架构实战之原理概念分析
JAVA大飞哥 2019-06-16 21:07:08 引言 高并发是指在同一个时间点,有很多用户同时访问URL地址,比如:淘宝的双11.双12,就会产生高并发.又如贴吧的爆吧,就是恶意的高并发请求, ...
- java开发程序员_Java大牛给入门Java开发程序员的10个学习建议
Java的知识点其实非常多,并且有些知识点比较难以理解,有时候我们自以为理解了某些内容,其实可能只是停留在表面上,没有理解其底层实现原理. 纸上得来终觉浅,绝知此事要躬行. 学习Java基础的时候,应 ...
- java 集成开发工具_最好的Java开发人员测试和集成工具
java 集成开发工具 通过从您的应用程序学习企业APM产品,发现更快,更有效的性能监控. 参加AppDynamics APM导览! 无论您是刚刚起步还是已经从事了一段时间,使用正确的工具进行编程都可 ...
- 最好的Java开发人员测试和集成工具
通过从应用程序中学习企业APM产品,发现更快,更高效的性能监控. 参加AppDynamics APM导览! 无论您是刚开始还是已经使用了一段时间,使用正确的工具进行编程都可以对项目的成功产生巨大的影响 ...
- Java开发人员的5种工具
改善我们编写的Java代码的一种方法是使用最好的工具. 因此,让我们看看IDR Solutions建议使用的5种最常用的工具来帮助Java开发人员编写更好的代码. 查找错误 FindBugs是一个开放 ...
- 《码出高效:java开发手册》七 - 并发与多线程
前言 现代CPU运算速度以百亿计,家用计算机和操作系统也是数十进程,数百线程,程序相应也需要采用多线程和并发的技术 并发和并行:并发是指某个时间段,多任务处理:并行是指同时处理多任务的能力:这两个概念 ...
最新文章
- 深度学习入门课程推荐
- 【职业规划和代码库设计】
- C/C++ 如何劫持别人家的命令||函数||程序(只能对于window而言)
- asp.net 将bmp格式图片怎么转换为jpg_PNG图片怎么转换成JPG?原来还可以这么转换...
- zabbix3.0.2 使用percona mysql插件来监控mysql5.7的详细实现过程
- IOS 归档 即序列化与反序列化
- java day19【File类、递归】
- matplotlib画图一行三个图
- matlab矩阵除法——记忆技巧
- PHP api接口开发
- 南卡小音舱体验评测:CD级音质听感震撼
- CSS3 设置模糊背景图片
- Java内存溢出排查(必看)
- 勒索病毒SARA,请勿用于非法用途。
- 通俗学AI(3):VGG套路得人心
- Unity如何在AssetStore寻找需要的资源并下载导入?
- 游戏半条命系列人物皮肤壁纸
- 最新资讯:浩辰CAD机械2013软件将于6月强势推出
- 使用HTML5制作电影影评网
- WindTerm屏幕锁定