/**
* 饿汉式单例模式
*/
public class SingleTest1 {
private static SingleTest1 singleInstance;
private SingleTest1(){
}
public static SingleTest1 getSingleInstance(){
return new SingleTest1();
}
}
/**
* 懒汉式单例模式
*/
public class SingleTest2 {
private static SingleTest2 singleInstance;
private SingleTest2(){
}
public static SingleTest2 getSingleInstance(){
if (singleInstance == null){
singleInstance = new SingleTest2();
}
return singleInstance;
}
}
/**
* 双重锁 单例模式
* 由于jvm执行程序时肯能会出现重排序现象,所以线程不安全
*/
public class SingleTest3 {
private static SingleTest3 singleInstance;
private SingleTest3(){};
public static SingleTest3 getSingleInstance(){
if (null == singleInstance){
synchronized (SingleTest3.class){
if (null == singleInstance){
singleInstance = new SingleTest3();
}
}
}
return singleInstance;
}
}
/**
* 静态内部类单例模式
* 可保证线程安全,也能保证单例的唯一性,同时也延迟了单例的实例化
*/
public class SingleTest4 {
private SingleTest4(){
}
public SingleTest4 getSingleInstance(){
return SingleInstanceHandler.singleInstance;
}
private static class SingleInstanceHandler{
private static SingleTest4 singleInstance = new SingleTest4();
}
}