DCL
代码节选
package com.kk.singleton.doubleCheck;
import lombok.extern.slf4j.Slf4j;
public class DCSingleton {
private static volatile DCSingleton singleton;
private DCSingleton() {
}
public static DCSingleton getInstance() {
if (singleton == null) {
synchronized (DCSingleton.class) {
if (singleton == null) {
singleton = new DCSingleton();
}
}
}
return singleton;
}
}
@Slf4j
public class TestSingleton {
public static void main(String[] args){
for(int i=0;i<5;i++){
new Thread(new Runnable() {
public void run() {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
log.info("实例={}", DCSingleton.getInstance());
}
}).start();
}
}
}
执行结果
09:27:28.313 [Thread-1] INFO com.kk.singleton.TestSingleton - 实例=com.kk.singleton.doubleCheck.DCSingleton@78354658
09:27:28.313 [Thread-3] INFO com.kk.singleton.TestSingleton - 实例=com.kk.singleton.doubleCheck.DCSingleton@78354658
09:27:28.313 [Thread-0] INFO com.kk.singleton.TestSingleton - 实例=com.kk.singleton.doubleCheck.DCSingleton@78354658
09:27:28.313 [Thread-2] INFO com.kk.singleton.TestSingleton - 实例=com.kk.singleton.doubleCheck.DCSingleton@78354658
09:27:28.313 [Thread-4] INFO com.kk.singleton.TestSingleton - 实例=com.kk.singleton.doubleCheck.DCSingleton@78354658