RT

解决方案 »

  1.   

    就算是判断两次在跨JVM的情况下还可能出现问题。
      

  2.   

    迟缓初始化 为什么要判断 两次是否为null  
    ?什么问题啊?
    难道是懒汉式单例模式?
    你分析一下是初次请求和以后多次请求的问题,这样可以提高效率!
      

  3.   

    这个不安全,一般不用就好。给你找了一个讲Double-checked locking,内容很多,我没看,你好好品味吧
    http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html
      

  4.   

    简单说吧如果A不等于空,那么准备获得锁,
    但此时有可能另外一个线程也在做这个操作,而且他先获得了锁。
    另一个线程更新了A数据,此时不再为空了。并释放了锁。
    这个线程终于获得了锁,但此时A已经不是空了。如果你不判断你获得锁只有,A是否还是为空,那么就会再次初始化A。
      

  5.   


    老大一解释,立马懂了,关键在 第一次判断是否为null之后,准备获得锁 这个时间段中间,有可能其他线程利用这段时间已经完成一次初始化