标签:对象 zed == 利用 let tin 状态 return 判断
public class Singleton { static Singleton instance; static Singleton getInstance(){ if (instance == null) { synchronized(Singleton.class) { if (instance == null) instance = new Singleton(); } } return instance; } }
利用双重检查创建单例对象: 在获取实例getInstance()的方法中, 首先判断instance是否为空, 如果为空, 则锁定Singleton.class并再次检查instance是否为空, 如果还为空则创建一个Singleton实例
假设有A,B两个线程同时调用getInstance()方法, 他们会同时发现instance == null, 于是同时对Singleton.class加锁, 此时JVM保证只有一个线程能加锁成功(假设是A), 另外一个线程则会处于等待状态(假设是B); 线程A会创建一个Singleton实例, 之后释放锁, 锁被释放后, 线程B被唤醒, 此时B可以加锁, 加锁成功后, 线程B检查instance == null 时发现已经创建过Singleton实例, 所以B不会再创建一个Singleton实例
标签:对象 zed == 利用 let tin 状态 return 判断
原文地址:https://www.cnblogs.com/zhuoweichang/p/10566789.html