Higher performance singleton writing in concurrent environment

GetAcquire () and setRelease() are the methods provided in 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(); }}}Copy the code