1.单例模式懒汉式线程安全问题
- 在没有锁的程序中,如果有多个线程来调用Singleton的返回实例的方法,当一个进去if()判断的时候,还没有new 新对象时候,已经被挂起,第二个线程又进来了,这样就会新建两个对象,所以也不是所谓的单例模式了。
2.使用同步机制解决懒汉式的线程安全问题
class Singleton{
private Singleton() {
}
private static Singleton instance = null;
public static Singleton getInstance() {
if(instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}
public class TestSingleton {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);
}
}