代码如下
package singleton;
public class SingletonTest {
public static void main(String[] args) {
Singleton1 instance1 = Singleton1.getInstance();
Singleton1 instance2 = Singleton1.getInstance();
System.out.println(instance1 == instance2);
System.out.println(instance1.hashCode());
System.out.println(instance2.hashCode());
}
}
class Singleton1{
private static volatile Singleton1 instance;
private Singleton1(){
}
//提供一个静态公有方法,当使用到该方法时,才去创建instance
//即懒汉式
public static Singleton1 getInstance(){
if(instance == null){
synchronized (Singleton1.class) {
if (instance == null) {
instance = new Singleton1();
}
}
}
return instance;
}
}
流程分析:
优缺点:按我的理解,跟线程同步式懒汉式相比就是由全部的线程等待变成了一部分线程等待(可能我理解错了,不要相信我)