美文网首页
使用CAS(AtomicReference)实现的单例模式

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

作者: Xigong | 来源:发表于2021-03-09 11:15 被阅读0次

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. 代码相对稍微复杂

参考文章:

相关文章

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

    CAS是项乐观锁技术,当多个线程尝试使用CAS同时更新同一个变量时,只有其中一个线程能更新变量的值,而其它线程都失...

  • iOS 单例

    单例模式实现不能使用继承 定义单例实现 简写 定义单例实现宏

  • 单例模式

    饿汉模式: 懒汉模式: Double CheckLock(DCL)实现单例 静态内部类实现单例 枚举单例 使用容器...

  • 单例模式之枚举类enum

    通过枚举实现单例模式 枚举类实现单例模式的优点 对于饿汉式单例模式和懒汉式单例模式了解的同学,使用以上两种单例模式...

  • 设计模式--单例模式

    单例模式概述 单例模式实现方式 为什么要使用单例模式 单例模式实现方式 饿汉式 类加载后就会将对象加载到内存中,保...

  • 面试题总结

    1.单例设计模式的实现,为什么使用单例模式?? static MusicManager ...

  • iOS开发中ARC环境下单例模式

    单例模式 1.1 概念相关 (1)单例模式 **(2)使用场合 ** 1.2 ARC实现单例 **(1)步骤 **...

  • iOS 开发MRC环境下的单例模式?代码?

    1.单例模式 1.1 概念相关 (1)单例模式 (2)使用场合 1.2 MRC实现单例 (1)实现步骤 (2)配置...

  • 单例模式

    单例模式 当系统中对于某个类,只需要有一个实例化对象时,可以使用单例模式。 单例模式实现方式 单例模式的实现主要有...

  • 设计模式之一:单例模式

    摘要:设计模式之一:单例模式目录介绍1.单例模式介绍2.单例模式定义3.单例模式使用场景4.单例模式的实现方式 4...

网友评论

      本文标题:使用CAS(AtomicReference)实现的单例模式

      本文链接:https://www.haomeiwen.com/subject/bjivqltx.html