Java:证明DCL不起作用

时间:2018-02-07 14:02:48

标签: java concurrency

我想知道是否可以可靠地证明双重检查锁定已被破坏:

public static Singleton getInstanceDC() {
  if (_instance == null) {                // Single Checked
    synchronized (Singleton.class) {
      if (_instance == null) {        // Double checked
        _instance = new Singleton();
      }
    }
 }
 return _instance;
}

有没有可靠的方法来创建一个测试或程序,表明它不起作用?有没有正式的验证证明?

2 个答案:

答案 0 :(得分:1)

你见过这个DoubleCheckTest class吗?

这是一个测试用例,显示它无法正常工作

我通过这个page找到了这个例子。该测试的作者是Paul Jakubik。

答案 1 :(得分:0)

我找到了我要找的东西: 有一个名为jcstress的java工具,它用于验证JVM的正确性。

更准确地说,DCL测试用例的源代码可以在这里找到: http://hg.openjdk.java.net/code-tools/jcstress/file/9270b927e00f/tests-custom/src/main/java/org/openjdk/jcstress/tests/singletons/UnsafeDCL.java#l71

我想说这是按规格证明的:)

相关问题