volatile 的特性:
- 保证线程可见性, 具体查看 线程
- 禁止指令重排序
DCL单例
先来个手撸DCL单例:
/*** DCL单例,双检锁*/public class DCLSingleton {//自身维护私有静态实例,private static DCLSingleton instance = null;//public一个DCL获取实例的public static DCLSingleton getInstance(){//第一次检查if ( instance == null ){synchronized (DCLSingleton.class){//第二次检查if (instance == null){instance = new DCLSingleton();}}}return instance;}//构造器私有private DCLSingleton(){ }}
