/**
* 单例模式 懒汉式(安全)
*/
class Singleton {
// 1.声明一个私有变量
// 2.使用volatile关键字,使变量在多个线程可见性
private static volatile Singleton singleton;
// 2.私有化构造函数(防止被人可以new对象出来)
private Singleton(){};
// 3.对外暴漏获取对象的方法
public static Singleton getInstance(){
//如果对象为空,则创建。不为空,则返回
if(singleton == null){
// 4.加入同步代码块
synchronized (Singleton.class){
if(singleton == null){
singleton = new Singleton();
}
}
}
return singleton;
}
}
public class Test {
public static void main(String[] args) {
Singleton instance1 = Singleton.getInstance();
Singleton instance2 = Singleton.getInstance();
System.out.println(instance1 == instance2);//结果应该是true
System.out.println(instance1.hashCode() == instance2.hashCode());
}
}
优点:既是线程安全的,也解决了效率低,同时它是懒汉式的,避免了资源浪费。