java并发学习
2021-07-13 11:02:38 0 举报
java并发学习
作者其他创作
大纲/内容
工作内存1变量1
AQS的理解:AQS是Java并发包的基础类
CAS你现在还是1吗天哪,被人抢先一步,此时值为2,CAS失败
线程2
线程1
Atomic原子类及底层实现: java并发包提供了一系列Atomic原子类,比如AtomicIntegerAtomic底层运用的是无锁化CAS机制(compare and set)先比较在设置每个线程获取值都是原子操作的
加锁线程=null
工作内存2变量0(强制过期)
线程1修改内存变量为1
volatile 可见性
CAS你现在是1吗,如果是就修改成2
AbstractQueuedSynchronizer
CAS你是2吗,太好了,这次是,帮我修改成3
Java8对CAS的优化:比如说大量的线程同时并发修改一个 AtomicInteger,可能有很多线程会不停的自旋,进入一个无限重复的循环中。性能和效率都不是很好于是Java8推出了LogAdder他就尝试使用分段CAS及自动分段迁移CAS来提升性能和效率,他的底层是引入了Call[]数组
call数组value=6
base5
state=0
我拿到1
此时线程2获取变量的时候发现已过期,就会重新从主内存中获取变量=1
再次获取值2
AtomicInteger(3)
call数组value=3
我先拿到0
CAS你是0吗如果是就修改成1
一开始线程数量5个还是用默认的CAS如果发下更新线程变多,就会施行CAS分段会引入一个call数组,最后就会把 base 值和所有 Cell 分段数值加起来返回给你
ReentrantLock
线程3
主内存变量1
call数组value=2
强制刷新主内存
线程2和3同时获取值为1
0 条评论
下一页