在对象上同步

时间:2017-04-28 11:25:01

标签: java

在这种情况下有什么问题:

private static final Integer LOCK=0;
synchronized(LOCK){

//work
}

建议不要推荐使用此监视器来锁定。

1 个答案:

答案 0 :(得分:6)

  

建议不要推荐使用此监视器来锁定。

   if let testTempUrl = Bundle.main.url(forResource: "index", withExtension: "html", subdirectory:"sub") {
                if FileManager.default.fileExists(atPath: testTempUrl.path) {

                    webViewWK.loadFileURL(testTempUrl, allowingReadAccessTo: testTempUrl.deletingLastPathComponent())


                } else {
                    askSiriWhy()
                }
            }

相同
private static final Integer LOCK=0;

private static final Integer LOCK=Integer.valueOf(0); cached by specification

这意味着任何其他人也可以获得Integer.valueOf(0)并在其上同步;所以你可能会得到意想不到的争用(充其量)或死锁(最坏的情况)。

您可以使用Integer.valueOf(0),它不是缓存的实例;或者只使用new Integer(0),因为如果new Object()只用作监视器,它就无关紧要。