public class Singleton {
//线程安全且效率高的单例模式
private volatile static Singleton uniqueInstance;
private Singleton()
{
}
public static Singleton getInstance()
{
if(uniqueInstance==null)
{
//a双重检查加锁多线程情况下会出现某个线程虽然这里已经为空,但是另外一个线程已经执行到d处
synchronized(Singleton.class)//b
{
if(uniqueInstance==null)//c
//不加volitale关键字的话有可能会出现尚未完全初始化就获取到的情况 ll。原因是内存模型允许无序写入
{
uniqueInstance=new Singleton();//d 此时才进行了初始
}
}
}
return uniqueInstance;
}
}
利用双重检查加锁机制实现线程安全的单例模式
最新推荐文章于 2023-10-17 05:00:00 发布