并发环境下性能更高的单例模式写法
getAcquire()、setRelease() 为 Java9 中提供的方法
import java.util.concurrent.atomic.AtomicReference;
public class Singleton {
static class DbConnection {
DbConnection() {
System.out.println(Thread.currentThread().getName());
}
}
static AtomicReference<DbConnection> ref = new AtomicReference<>();
public static DbConnection getDb() {
// java9
var localRef = ref.getAcquire();
if (localRef == null) {
synchronized (Singleton.class) {
localRef = ref.getAcquire();
if (localRef == null) {
ref.setRelease(new DbConnection());
}
}
}
return localRef;
}
public static void main(String[] args) {
for (var i = 0; i < 20; i++) {
new Thread(() -> {
getDb();
}).start();
}
}
}