java – 与外部同步在同一对象上的内部同步

前端之家收集整理的这篇文章主要介绍了java – 与外部同步在同一对象上的内部同步前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
最近我参加了一些关于一些设计模式的讲座:

显示以下代码

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;
}

取自:Double-checked locking: Take two

我的问题与上面提到的模式无关,但是与synchronized块有关:

在第1行和第1行中完成的双重同步是否有任何好处? 3关于同步操作是否在同一个对象上完成的事实?

解决方法

在旧的Java内存模型(JMM)中,退出同步块据称将本地数据刷新到主内存.输入用于重新读取缓存数据的同步块. (此处,缓存包含具有相关编译器优化的寄存器.)旧JMM已损坏且未正确实现.

在新的JMM中它没有做任何事情.新JMM指定为1.5,并针对“Sun”1.4 JRE实现. 1.5前一段时间完成了它的服务终止期限,所以你不必担心旧的JMM(好吧,也许Java ME会做一些不可预测的事情).

猜你在找的Java相关文章