单例模式安全
public class EagerSingleton {spa
private static EagerSingleton instance = new EagerSingleton();线程
/**get
* 私有默认构造子同步
*/io
private EagerSingleton(){}class
/**方法
* 静态工厂方法线程安全
*/static
public static EagerSingleton getInstance(){
return instance;
}
}
public class LazySingleton {
private static LazySingleton instance = null;
/**
* 私有默认构造子
*/
private LazySingleton(){}
/**
* 静态工厂方法
*/
public static synchronized LazySingleton getInstance(){
if(instance == null){
instance = new LazySingleton();
}
return instance;
}
}
public class Singleton {
private volatile static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
//先检查实例是否存在,若是不存在才进入下面的同步块
if(instance == null){
//同步块,线程安全的建立实例
synchronized (Singleton.class) {
//再次检查实例是否存在,若是不存在才真正的建立实例
if(instance == null){
instance = new Singleton();
}
}
}
return instance;
}
}
public class Singleton {
private Singleton(){}
/**
* 类级的内部类,也就是静态的成员式内部类,该内部类的实例与外部类的实例
* 没有绑定关系,并且只有被调用到时才会装载,从而实现了延迟加载。
*/
private static class SingletonHolder{
/**
* 静态初始化器,由JVM来保证线程安全
*/
private static Singleton instance = new Singleton();
}
public static Singleton getInstance(){
return SingletonHolder.instance;
}
}
public enum Singleton {
/**
* 定义一个枚举的元素,它就表明了Singleton的一个实例。
*/
uniqueInstance;
/**
* 单例能够有本身的操做
*/
public void singletonOperation(){
//功能处理
}
}