public class Singleton {
private Singleton(){
}
private static Singleton instance = new Singleton();
public static Singleton getInstance(){
return instance;
}
public static Singleton instance2;
//double check 避免线程安全
public static Singleton getInstance2(){
if(instance2==null){
synchronized (Singleton.class){
if(instance2==null){
instance2 = new Singleton();
}else {
return instance2;
}
}
}
return instance2;
}
/**
* 线程安全 :
* 根据类加载机制
* 在使用时才会被装载只有一次 ,static JVM会保证原子性,不会出现线程安全问题
*/
private static class SingletonInner {
private static final Singleton INSTANCE = new Singleton();
}
public static Singleton getInstance3(){
return SingletonInner.INSTANCE;
}
/**
* 推荐 不解释
*/
enum EnumSingle{
INS;
private Singleton INSTANCE;
/**
* JVM 只会执行一次
*/
private EnumSingle(){
INSTANCE = new Singleton();
}
public Singleton getINSTANCE(){
return INSTANCE;
}
}
public static Singleton getInstance3Enu(){
return EnumSingle.INS.getINSTANCE();
}
}
单列:
不变化的对象,只用于操作,避免了new,减少GC,多线程不操作该对象的成员变量。
反射也会破坏。