DLC双端锁,CAS,ABA问题
一.什么是DLC双端锁?有什么用处? 为了解决在多线程模式下,高并发的环境中,唯一确保单例模式只能生成一个实例 多线程环境中,单例模式会因为指令重排和线程竞争的原因会出现多个对象 public class DLCDemo { private static DLCDemo instance = null; private DLCDemo(){ System.out.println(Thread.currentThread().getName() + "\t" + " 线程启动"); }; public static DLCDemo getInstance(){ if (instance == null){ instance = new DLCDemo(); } return instance; } public static void main(String[] args) { //多线程模式下 for (int i = 1; i <= 10; i++) { new Thread(() -> { DLCDemo.getInstance(); },String.valueOf(i)).start(); } } } 运行结果: 在10个线程下,出现了10个对象,显然违背了单例模式 改进 public class DLCDemo { /*DLC双端锁机制不一定线程安全