单例模式懒汉模式线程安全问题解决方法
程序员文章站
2022-06-08 22:09:21
...
饿汉式会有效率的问题,即加载类时就会创建那个静态对象,会占据一定内存,如果你的类不大,第一种方法是好的.
如楼上所说,懒汉式会有线程安全的问题.可以通过 双重检查加锁 方法来解决.你可以去搜搜.百度上也有.
解决方法是:双重检查加锁机制实现
public class Singleton{
private volatile static Singleton uniqueInstance;
private Singleton(){}
public static Singleton getInstance(){
//先检查实例是否存在,如果不存在才进入下面的同步块
if(uniqueInstance==null)
{
//同步快,线程安全的创建实例
synchronized(Singleton.class){
if(uniqueInstance==null){
//再次检查实例是否存在,如果不存在,才真正的创建实例
uniqueInstance=new Singleton();
}
}
}
return uniqueInstance;
}
}
如楼上所说,懒汉式会有线程安全的问题.可以通过 双重检查加锁 方法来解决.你可以去搜搜.百度上也有.
解决方法是:双重检查加锁机制实现
public class Singleton{
private volatile static Singleton uniqueInstance;
private Singleton(){}
public static Singleton getInstance(){
//先检查实例是否存在,如果不存在才进入下面的同步块
if(uniqueInstance==null)
{
//同步快,线程安全的创建实例
synchronized(Singleton.class){
if(uniqueInstance==null){
//再次检查实例是否存在,如果不存在,才真正的创建实例
uniqueInstance=new Singleton();
}
}
}
return uniqueInstance;
}
}
上一篇: 旭烈兀西征简介 旭烈兀西征的影响是什么
下一篇: 微盾PHP脚本加密专家php解密算法