采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
cas中是不是也有锁的控制。一个线程在cas进行处理的时候。他从主存中获取到最新的值。然后和自己工作内存中的值进行比较。一致则进行后续操作。他在获取主存值然后进行比较的时候。这个时刻如果线程2开始执行。他从主存中获取到值就还没有发生变化,这个时候是不是就会出现问题。所以cas在处理的时候除了不断从主存中获取最新的值与工作内存中的值进行比较。 是不是在获取主存中的值然后与工作内存中的值进行比较。处理后刷回主存的时候还需要锁的控制。
你好,这个理解稍微有点问题,cas实现里“对比主存和工作内存是否相等,相等则更新”这个合在一起是一个底层的指令完成的,不存在锁“如果不等,则通过volatile再次获取主存里的值,更新相关变量,并再次尝试cas更新流程”这个步骤是通过自旋完成的,白话来说是通过死循环来保证的,直到更新成功为止。这个过程也是不含锁的。
cas实现里“对比主存和工作内存是否相等,相等则更新”这个合在一起是一个底层的指令完成的. 那可以理解为这个底层的指令保证了在比较的过程,更新的过程中不会有第二个线程获取主存中的值。实际上不含有锁。但是实现了和加锁相似的效果。
这个底层的执行是cpu层面的吗?已经超出了java的范围??
这个最底层是native标识的代码,这种的实际实现已经不是java实现的了
登录后可查看更多问答,登录/注册
构建完整并发与高并发知识体系,倍增高薪面试成功率!
1.7k 1
1.1k 18
1.1k 15
3.5k 12
1.2k 12