在这种情况下有什么问题:
private static final Integer LOCK=0;
synchronized(LOCK){
//work
}
建议不要推荐使用此监视器来锁定。
答案 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()
只用作监视器,它就无关紧要。