首页IT科技java多线程知识(Java多线程(5):CAS)

java多线程知识(Java多线程(5):CAS)

时间2025-05-03 04:25:44分类IT科技浏览3875
导读:您好,我是湘王,这是我的博客园,欢迎您来,欢迎您再来~...

您好            ,我是湘王                   ,这是我的博客园       ,欢迎您来            ,欢迎您再来~

JDK1.5之前                  ,Java的多线程都是靠synchronized来保证同步的       ,这会引起很多性能问题      ,例如死锁             。但随着Java的不断完善                  ,JNI(Java Native Interface)使得Java能越过JVM直接调用本地方法             ,例如CAS                   。

CAS是Compare And Swap(比较与交换)的缩写      ,它用于实现多线程同步的原子指令                  ,允许算法执行读-修改-写操作             ,而无需担心其他线程同时修改变量      。说人话,意思就是它的操作过程足够细微                  ,以至于线程都奈何不了它      。

所谓原子指令就是指不会被线程调度机制打断的操作指令                   ,这种操作一旦开始,就一直运行到结束            ,中间不会有任何线程切换                   ,即要么全部完成       ,要么全部中断                   。换一种说法            ,就是CAS可以保证Java运算实现我们想要的操作而无需担心会受到多线程的影响            。

某种程度上                  ,CAS可以用来取代synchronized的强制同步       ,提升性能      。其实整个java.util.concurrent包都是建立在CAS之上的      ,尤其是Java中大多数锁的实现基类AbstractQueuedSynchronizer                  ,更是以CAS为基础             ,提供了一系列的独占锁             、共享锁                   、可重入锁      、自旋锁      、读写锁等多线程控制手段(这在后面会说)                   。就像图中那样:

Java对CAS的实现都在java.util.concurrent.atomic包下(java.util.concurrent也简称JUC      ,这是个简称            。所以如果有面试官说想让你谈谈JUC相关的问题                  ,不要一脸懵             ,否则会被立即淘汰)。AtomicInteger为例,从源码可以看出CAS操作都是通过sun包下Unsafe类实现                  ,而Unsafe类中的方法都是native方法                   ,由本地实现,和操作系统                   、CPU都有关系                   。CAS有一个比较通用的实现模式:

1            、首先声明(共享)变量为volatile

2      、然后使用CAS的原子条件来更新

3                   、同时配合volatile的可见性来实现线程之间的同步

前面讲过            ,不用深究volatile关键字的用途                   ,因为随着机器配置的豪华       ,其实这个关键字已经没啥用了            ,而且也可以看到                  ,CAS里面也有大量出现       ,JDK已经替你用好了      ,自己如果不太熟悉就不要用了                  。CAS相关类结构图是:

还是老规矩                  ,用代码来举例:

CAS的内容并不多             ,可以看看它的源码      ,还是比较有意思的。

感谢您的大驾光临!咨询技术            、产品、运营和管理相关问题                  ,请关注后留言             。欢迎骚扰             ,不胜荣幸~

声明:本站所有文章,如无特殊说明或标注                  ,均为本站原创发布                  。任何个人或组织                   ,在未征得本站同意时,禁止复制                   、盗用                  、采集、发布本站内容到任何网站             、书籍等各类媒体平台      。如若本站内容侵犯了原著者的合法权益            ,可联系我们进行处理             。

创心域SEO版权声明:以上内容作者已申请原创保护,未经允许不得转载,侵权必究!授权事宜、对本内容有异议或投诉,敬请联系网站管理员,我们将尽快回复您,谢谢合作!

展开全文READ MORE
linux运行so动态库(linux动态增加LV空间的方法) 斐波那契数列在股市中的使用方法(斐波那契数列(二))