单例模式:确保一个类只有一个实例。
====单例类(饿汉模式):
1、构造方法私有。
2、私有静态实例变量。
3、提供外界可以获取该是里的静态方法。
public class Test1{
public static void main(String[] args){
Singleton st = Singleton.getInstance();
}
}
class Singleton{
private static final Singleton singleton = new Singleton();
private Singleton(){}
public static Singleton getInstance(){
return singleton;
}
}
===懒汉模式(延迟加载、线程安全模式):
//双重验证锁
class Singleton{
//volatile禁止JVM对其相关代码进行指令重排
private static volatile Singleton singleton = null;
private Singleton(){}
public static Singleton getInstance(){
//第一次校验
if(singleton == null){
synchronized(Singleton.class){
//第二次校验
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
===推荐模式:静态内部类的单例模式
当第一次访问类中的静态字段时,会触发类加载,而且静态字段只加载一次。在类加载的过程中,有类加载器实现加锁,从而实现了线程安全。
class Singleton{
//静态内部类
private static class SingletonHolder{
private static Singleton singleton = new Singleton();
}
private Singleton(){}
public static Singleton getInstance(){
return SingletonHolder.singleton;
}
}