目录
单例模式: 在内存中存在(仅)有限(一)的对象。控制内存中对象存在的数量。
• 懒汉式
public class Singleton{
private static Singleton instance = null;
private Singleton(){}
public static Singleton getInstance(){
if(instance == null){ // (1)
instance = new Singleton();//(2)
}
return instance;
}
}
注:多线程环境,线程不安全
两个线程(A,B)同时访问(1), A先访问,准备创建对象, B线程来到(1),判断 instance ==null ,也准备创建对象。
解决方法:(加锁)
public class Singleton{
private static Singleton instance = null;
private Singleton(){}
public static synchronized Singleton getInstance(){
if(instance == null){
instance = new Singleton();
}
return instance;
}
}
public class Singleton{
private static volitle 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 static Singleton instance = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return instance;
}
}
注:线程安全,一开始就初始化。
懒汉式与饿汉式的区别:
• 枚举式
public enum Singleton{
INSTANCE;
}
注: 枚举所创建的I的对象也是单例的,但在实际开发中并不推荐使用。