懒汉式(线程不安全)
//懒汉式(线程不安全)
public class Singleton {
private static Singleton singleton;
private Singleton(){}
private static Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
//改进一下,懒汉式(线程安全)
public class Singleton {
private static Singleton singleton;
private Singleton(){}
private static synchronized Singleton getInstance(){
if(singleton == null){
singleton = new Singleton();
}
return singleton;
}
}
饿汉式(线程安全,但是不能实现懒加载的效果)
//饿汉式(但是没有懒加载效果)
public class Singleton{
private static Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
双重校验锁(线程安全,有一定的性能损失)
//双重检查模式(有一定的性能损失)
public class Singleton{
private static volatile Singleton singleton;
private Singleton(){}
public static Singleton getInstance(){
if (singleton == null){
synchronized(Singleton.class){
if (singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
静态内部类(线程安全,并且能够实现懒加载效果)
//静态内部类(推荐)
public class Singleton{
private Singleton(){}
public static Singleton getInstance(){
return innerclass.singleton;
}
private static class innerclass{
private static final Singleton singleton = new Singleton();
}
}