7 | * 单例模式 8 | *
9 | * (推荐)DCL双端检查单例模式 10 | */ 11 | public class VolatileDemo { 12 | //禁止底层指令重排优化 加volatile 13 | public static volatile VolatileDemo instance = null; 14 | 15 | private VolatileDemo() { 16 | System.out.println ("私有构造方法....."); 17 | } 18 | 19 | /** 20 | * 单例模式 21 | * 问题: 22 | * 线程不安全 23 | * 解决方案: 24 | * 1. 在方法上加上synchronized关键字 25 | * 2. DCL双重检查机制 26 | */ 27 | 28 | public static VolatileDemo getInstance() { 29 | if (instance == null) { 30 | synchronized (VolatileDemo.class) { 31 | if (instance == null) { 32 | instance = new VolatileDemo (); 33 | } 34 | } 35 | } 36 | return instance; 37 | } 38 | 39 | 40 | public static void main(String[] args) { 41 | for (int i = 0; i <= 100; i++) { 42 | new Thread (() -> { 43 | VolatileDemo.getInstance (); 44 | }, String.valueOf (i)).start (); 45 | } 46 | } 47 | } 48 | --------------------------------------------------------------------------------