iOS 中单例模式的写法,以及如何保证单例模式在多线程中的线程安
2021-05-12 本文已影响0人
mile_zzz
标签: 单例模式、线程安全
我们都知道在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(从偏向锁到重量级锁)