一、简介
Java中单例模式定义:“一个类有且仅有一个实例,并且自行实例化向整个系统提供”。要点就是只能有一个实例,且可以向整个系统提供该实例。一般来说有这五种写法:懒汉式,饿汉式,双重锁形式,静态内部类,枚举。
二、实例
2.1懒汉式
<code>
public class Singleton{
private static Singleton instance = null;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
</code>
特点:延迟加载,但同步了整个方法,效率低,不推荐使用。
2.2 饿汉式
<code>
public class Singleton{
private static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
</code>
特点:代码简洁,但是没有延迟加载。
2.3 双重锁形式
<code>
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;
}
}
</code>
特点:延迟加载,使用了volatile。
2.4 静态内部类
<code>
public class Singleton{
private static class SingletonHolder{
private static final Singleton INSTANCE = new Singleton();
}
private Singleton(){}
public static Singleton getInstance(){
return SingletonHolder.INSTANCE;
}
}
</code>
特点:延迟加载
2.5 枚举
<code>
public enum Singleton{
INSTACNE;
}
</code>
特点:可防止反序列化重新创建新的对象