大家好,又见面了,我是你们的朋友全栈君。
参考AtomicInteger类如下方法
public final int incrementAndGet() {
for (;;) {
int current = get();//1
int next = current + 1;//2
if (compareAndSet(current, next))//3
return next;
}
}
我们把获取锁的过程比作拨通女神的电话,在1处由于value值为volatile所以每次都能拿到最新的女神的电话,可能在2的时候女神电话占线,于是3的时候就打不过去呀;这就是多线程的同步问题了,但是没关系呀,再拨,一个for循环,继续播,直到拨通,由此可见,CAS锁叫乐观锁呢是因为觉得不会每次到2的时候都占线吧。(其实看到这代码第一反应是跟死皮赖脸的追女孩子一样,这次约不到下次再约就是了)
如果偏偏就这么巧,真的每次都2的时候都占线呢?比如有人发布了范冰冰的手机号,偏偏这个手机号还开机,那基本每次打过去都占线的话,这锁就死循环咯,所以说这个锁也不是万能,线程太多(大家都知道范冰冰手机号然后去拨)的时候,错误概率太高,反而效果不好
发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/127800.html原文链接:https://javaforall.cn
【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛
【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...