これは私がこれまでに持っているものです。正しい方向に進んでいますか? あるスレッドが他のスレッドよりも頻繁にシングルトンにアクセスする必要があるシナリオでこれを使用することを目的としているため、ロックのないコードが望ましいため、練習のためにアトミック変数を使用したいと考えました。
public final class ThreadSafeLazyCompareAndSwapSingleton {
private ThreadSafeLazyCompareAndSwapSingleton(){}
private static volatile ThreadSafeLazyCompareAndSwapSingleton instance;
private final static AtomicBoolean atomicBoolean = new AtomicBoolean(false);
public static ThreadSafeLazyCompareAndSwapSingleton getCASInstance(){
if (instance==null){
boolean obs = instance==null;
while (!atomicBoolean.compareAndSet(true, obs == (instance==null))){
instance = new ThreadSafeLazyCompareAndSwapSingleton();
}
}
return instance;
}
}