前言
面试官不让用饿汉和锁,要求实现线程安全的单例,记录下使用原子类的解法;
代码
SingletonWithoutLock.java
import java.util.concurrent.atomic.AtomicReference;
/**
* @author jhz
* @date 19-8-10 下午11:55
*/
public class SingletonWithoutLock {
private static AtomicReference<SingletonWithoutLock> instance = new AtomicReference<>();
private SingletonWithoutLock() {
}
public static SingletonWithoutLock getInstance() {
for (; ; ) {
SingletonWithoutLock singleton = instance.get();
if (singleton == null) {
singleton = new SingletonWithoutLock();
if (!instance.compareAndSet(null, singleton))
continue;
}
return singleton;
}
}
}
测试类
/**
* @author jhz
* @date 19-8-11 上午12:13
*