iOS 中单例模式的写法,以及如何保证单例模式在多线程中的线程安全的?

标签: 单例模式、线程安全


我们都知道在ios中单例模式,就是指在一个应用程序的生命周期内要保证只存在一个对象实例,那在多线程中是如何实现并保证线程安全的呢,咱们不妨先来看一下最终的实现效果:

public class Singleton {
    private volatile Singleton instance = null
    // 私有初始化方法
    private Singleton() {}
    
    public Singleton getInstance(){
        if instance == null {
            synchronized(Singleton.class) {
                if instance == null {
                    instance = new Singleton()
                }
            }
        }
        return instance
    }
}

其实要保证单例模式的线程安全,需要注意两个方面第一个就是保证对象在线程间的是可见的(可访问的),另一方面就是在保证初始化线程同步的时候是否有双重检测机制。
ps: 这块有时间我再具体详细说说

名词解释:
volatile: 被volatile声明的变量在多线程中具有可见性。意思就是说,在多线程环境下,某个共享变量如果被其中一个线程给修改了,其他线程能够立即知道这个共享变量已经被修改了,当其他线程要读取这个变量的时候,最终会去内存中读取,而不是从自己的工作空间中读取,想要深入研究的同学可以参考彻底搞懂volatile关键字
sychronized: 通过对一个对象进行加锁来保证线程同步,可以参考一下这篇文章彻底搞懂synchronized(从偏向锁到重量级锁)

你可能感兴趣的:(iOS 中单例模式的写法,以及如何保证单例模式在多线程中的线程安全的?)