加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

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

发布时间:2020-12-15 00:08:06 所属栏目:Java 来源:网络整理
导读:最近我参加了一些关于一些设计模式的讲座: 显示以下代码: public static Singleton getInstance(){ if (instance == null) { synchronized(Singleton.class) { //1 Singleton inst = instance; //2 if (inst == null) { synchronized(Singleton.class) { /
最近我参加了一些关于一些设计模式的讲座:

显示以下代码:

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会做一些不可预测的事情).

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读