一尘不染

在Android中仔细检查了锁定

java

根据许多人的说法,除非您运行1.5或更高版本并使用volatile关键字,否则Java中常见的Double-Checked
Locking惯用语已被破坏。

损坏的双重检查锁样本:

// Broken multithreaded version
// "Double-Checked Locking" idiom
class Foo { 
  private Helper helper = null;
  public Helper getHelper() {
    if (helper == null) 
      synchronized(this) {
        if (helper == null) 
          helper = new Helper();
      }    
    return helper;
    }
  // other functions and members...
  }

该示例来自本文,该文章还提供了有关解决方法的详细信息:http
:
//www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

Pugh的上述分析是针对Java VM的。我在Android上工作,经常使用采用Double-Checked Locking的库。dalvik
VM的内存模型是否支持该惯用法?


阅读 168

收藏
2020-12-03

共1个答案

一尘不染

这个问题的答案意味着内存模型应该是相同的,并且新的双重检查锁定习惯用法将起作用。

2020-12-03