首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >cas是乐观锁吗(java乐观锁)

cas是乐观锁吗(java乐观锁)

作者头像
全栈程序员站长
发布2022-07-25 20:55:45
发布2022-07-25 20:55:45
4890
举报

大家好,又见面了,我是你们的朋友全栈君。

参考AtomicInteger类如下方法

代码语言:javascript
复制
    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的时候都占线呢?比如有人发布了范冰冰的手机号,偏偏这个手机号还开机,那基本每次打过去都占线的话,这锁就死循环咯,所以说这个锁也不是万能,线程太多(大家都知道范冰冰手机号然后去拨)的时候,错误概率太高,反而效果不好

发布者:全栈程序员栈长,转载请注明出处:https://javaforall.cn/127800.html原文链接:https://javaforall.cn

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2022年4月1,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档