前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >CAS 单例模式

CAS 单例模式

原创
作者头像
大发明家
发布2021-12-18 11:37:51
4160
发布2021-12-18 11:37:51
举报
文章被收录于专栏:技术博客文章技术博客文章

乐观锁的一种实现方式——CAS

在JDK1.5

中新增java.util.concurrent(J.U.C)就是建立在CAS之上的。相对于对于synchronized这种阻塞算法,CAS是非阻塞算法的一种常见实现。所以J.U.C在性能上有了很大的提升。

借助CAS(AtomicReference)实现单例模式:

代码语言:txt
复制
public final class SingleInstance {
代码语言:txt
复制
    private static final AtomicReference<SingleInstance> instanceRef = new AtomicReference<>();
代码语言:txt
复制
    private SingleInstance() {
代码语言:txt
复制
    }
代码语言:txt
复制
    public static SingleInstance getInstance() {
代码语言:txt
复制
        for (; ; ) {
代码语言:txt
复制
            SingleInstance instance = instanceRef.get();
代码语言:txt
复制
            if (instance != null) {
代码语言:txt
复制
                return instance;
代码语言:txt
复制
            }
代码语言:txt
复制
            instanceRef.compareAndSet(null, new SingleInstance());
代码语言:txt
复制
        }
代码语言:txt
复制
    }
代码语言:txt
复制
}

与sychronized实现的单例相比

优点:

  1. 无锁

缺点:

  1. 对象可能会被创建多个,设置失败的会被舍弃
  2. 代码相对稍微复杂

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档