几种常见的java单例模式
1 恶汉模式
优点: 加载类时天然的线程安全 调用效率高 (相比懒汉模式,以空间换时间)不需要同步。
public class Singleton{
private Singleton(){}
priavte static Singleton instance=new Singleton();
public static Singleton getInstance(){
return instance;
}
}
2懒汉模式
public class Singleton{
private Singleton(){}
priavte static Singleton instance;
public static synchronized Singleton getInstance(){
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
3静态内部类实现
优点:线程安全 效率高 延迟加载
public class Singleton{
private Singleton(){}
private static class SingletonHolder{
private static final Singleton intance=new Singleton();
}
//调用getInatance方法时 才会去加载静态内部类 天然的线程安全
public static Singleton getInatance(){
return SingletonHolder.intance
}
}
4 枚举实现
/**
* 枚举 天然的单例 优点多 只是没有延迟加载
* 简单 并且可以防止反序列化 和反射破坏
* @author LQ
*
*/
public enum Singleton{
INTANCE;
public void handler(){
// 可以加对象的一些操作
}
}
5 双重检查锁实现
public class Singleton{
private volatile static Singleton instance;
private Singleton(){}
public static Singleton getInatance(){
if(instance==null){
synchronized(Singleton.class){
if(instance==null){
instance=new Singleton();
}
}
}
return instance;
}
}