java单例模式双重检查,

  java单例模式双重检查,

  在Effecitve Java的第48条中提到了双重检查模式,并指出这种模式在Java中通常不适用。该模式的结构如下:

  此模式是对以下代码的改进:

  这段代码的目的是延迟资源的初始化。但是每次访问都需要同步。为了减少同步的开销,有一个双重检查模式。

  在Java中,双重检查模式是无效的,因为如果没有同步,引用类型就不是线程安全的。除了基本类型的long和double之外,double check模式都适用。

  是的。例如,下面的代码是正确的:

  以上是关于java中的双重检查模式(double-check

  成语)的一般结论。但是还没完,因为java的内存模式也在进步。(男子名)道格

  Lea在他的文章中写道:“根据JSR133的最新Java内存模型,如果引用类型声明为volatile,则双重检查模式可以工作”,参见

  http://gee.cs.oswego.edu/dl/cpj/updates.html。

  所以为了将来在Java中使用双重检查模式,可以使用下面的代码:

  当然,它必须是遵循JSR133规范的Java语言。

  因此,在J2SE 1.4或更早版本中,由于多线程或JVM调优时的无序写入,双重检查不可用。

  这个问题已经在J2SE 5.0中得到修复,volatile关键字可以用来保证多线程中的单例性。

  推荐方法

  是按需初始化保持器(iodh),

  详见http://en.wikipedia.org/wiki/initialization _点播_持有人_成语。

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: