首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件开发 >

[设计方式总结] 5. 单例模式(以及多线程、无序写入、volatile对单例的影响)

2013-03-27 
[设计模式总结] 5. 单例模式(以及多线程、无序写入、volatile对单例的影响)单例模式http://www.ibm.com/deve

[设计模式总结] 5. 单例模式(以及多线程、无序写入、volatile对单例的影响)
单例模式

http://www.ibm.com/developerworks/cn/java/j-dcl.html

定义:

        Ensure a class has only one instance, and provide a global point of access to it.

        确保某个类只有一个实例,并提供一个全局访问点。

类图:

[设计方式总结] 5. 单例模式(以及多线程、无序写入、volatile对单例的影响)

public static Singleton getInstance(){  if (instance == null)  {    synchronized(Singleton.class) {      //1      Singleton inst = instance;         //2      if (inst == null)      {        synchronized(Singleton.class) {  //3          inst = new Singleton();        //4        }        instance = inst;                 //5      }    }  }  return instance;}


这里的关键行是 //5。此行应该确保 instance 只为 null 或引用一个构造完整的Singleton 对象

BUT,Java 语言规范(Java Language Specification,JLS)要求不能将synchronized 块中的代码移出来。但是,并没有说不能将synchronized 块外面的代码移入synchronized 块中。JIT 编译器会在这里看到一个优化的机会。此优化会删除 //4 和 //5 处的代码,导致还是会有无序写入带来的问题!!!






热点排行