懒汉式
public class TestSingleton {
private TestSingleton() {
}
private static volatile TestSingleton instance = null;//volatile禁止指令重排
public static TestSingleton getInstance() {
if (instance == null) {
synchronized (TestSingleton.class) {
if (instance == null) {
instance = new TestSingleton();
}
}
}
return instance;
}
}
//同步延迟加载 — synchronized块
但是这种实现方式的运行效率仍然比较低,事实上,和使用synchronized方法的版本相比,基本没有任何效率上的提高
public class Singleton2 {
private static Singleton2 singleton2;
private Singleton2(){}
public static Singleton2 getSingleton2(){
synchronized(Singleton2.class){ // 使用 synchronized 块,临界资源的同步互斥访问
if (singleton2 == null) {
singleton2 = new Singleton2();
}
}
return singleton2;
}
}
饿汉式(天生是线程安全的)
public class Test{
private Test(){
}
private static volatile Test test=new Test();
public static getTest(){
test=new Test();
}
}