使用CAS(AtomicReference)实现的单例模式

CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失败,失败的线程并不会被挂起,而是被告知这次竞争中失败,并可以再次尝试。

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

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

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

public final class SingleInstance {
    private static final AtomicReference<SingleInstance> instanceRef = new AtomicReference<>();

    private SingleInstance() {
    }

    public static SingleInstance getInstance() {
        for (; ; ) {
            SingleInstance instance = instanceRef.get();
            if (instance != null) {
                return instance;
            }
            instanceRef.compareAndSet(null, new SingleInstance());
        }
    }

}

与sychronized实现的单例相比

优点:

  1. 无锁

缺点:

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

参考文章:

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容