实现线程安全的单例模式
懒汉式的单例模式,在调用方法首次获取类的实例的时候才实例化对象,因此并不是线程安全的:
实现线程安全方式:
Java双重校验锁(double checked locking)
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 MySingleton {
private static MySingleton instance = new MySingleton();
private MySingleton(){}
public static MySingleton getInstance() {
return instance;
}
}
使用静态内置类实现单例模式:
public class MySingleton {
//内部类
private static class MySingletonHandler{
private static MySingleton instance = new MySingleton();
}
private MySingleton(){}
public static MySingleton getInstance() {
return MySingletonHandler.instance;
}
}
使用static代码块实现单例:
public class MySingleton{
private static MySingleton instance = null;
private MySingleton(){}
static{
instance = new MySingleton();
}
public static MySingleton getInstance() {
return instance;
}
}