请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

关于CAS的理解

CAS是一种乐观锁机制的算法
核心概念是CAS(内存位置,预期值,新值)

内存位置即是共享变量的位置,使用预期值来计算新值,线程要改变内存位置的值时,会拿预期值和内存位置的值比较.

若相同则该算法会认为当前操作是线程安全的,就会更新内存位置的值
若不同,则由开发人员决定继续尝试还是进行别的操作。

分析AtomicInteger
其将变量i=0使用volatile修饰
假如线程1,2,3并发操作i++
cas1(0,0,1)cas2(0,0,1)cas3(0,0,1)
线程1进行操作更新i为1,那么此时2,3线程中的内存地址原值已经改变则cas操作失败
此时更新cas2(1,1,2)cas3(1,1,2)
假如线程3操作更新成功,那么cas2操作失败
此时更新cas3(2,2,3)
然后全部操作完成

老师我这样理解对吗?如有不对请指出,感谢老师

正在回答 回答被采纳积分+3

1回答

翔仔 2019-03-14 00:20:10

同学好,是可以这样理解的,通常会使用cas不断尝试,也就是写循环去尝试,直到成功或者超时:)

1 回复 有任何疑惑可以回复我~
  • 提问者 luyuni #1
    我又发现了一个问题如果刚比较完了,发现相等,另一个线程进来把值修改了,比较的过程并发怎么办,这样岂不是线程不安全了
    回复 有任何疑惑可以回复我~ 2019-03-15 22:10:44
  • 翔仔 回复 提问者 luyuni #2
    具体同学可以去阅读里面的源码,就会发现在读入的时候,如果真正并发(多核),还是会加lock标识符,会有短暂锁住,避免这类现象的发生
    回复 有任何疑惑可以回复我~ 2019-03-17 01:15:50
  • 提问者 luyuni 回复 翔仔 #3
    谢谢老师~
    回复 有任何疑惑可以回复我~ 2019-03-17 15:05:32

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信