volatile 的特性:

    1. 保证线程可见性, 具体查看 线程
    2. 禁止指令重排序

    DCL单例

    先来个手撸DCL单例:

    1. /**
    2. * DCL单例,双检锁
    3. */
    4. public class DCLSingleton {
    5. //自身维护私有静态实例,
    6. private static DCLSingleton instance = null;
    7. //public一个DCL获取实例的
    8. public static DCLSingleton getInstance(){
    9. //第一次检查
    10. if ( instance == null ){
    11. synchronized (DCLSingleton.class){
    12. //第二次检查
    13. if (instance == null){
    14. instance = new DCLSingleton();
    15. }
    16. }
    17. }
    18. return instance;
    19. }
    20. //构造器私有
    21. private DCLSingleton(){ }
    22. }