假设我有一个可由两个单独的线程访问的字段。我正在使用对象进行同步锁定。我可以在同步块之外检查null吗?换句话说,这是线程安全的:

private Object sharedObject() = new Object();
private final Object sharedObjectLock() = new Object();

private void awesomeMethod() {
   if(sharedObject != null) {
      synchronized(sharedObjectLock) {
         //code the uses sharedObject
      }
   }
}

最佳答案

不可以。在检查之后但在获得锁之前,可能会分配变量。

曾经有一种流派认为同步锁很昂贵,但是现在已经不对了。只要抓住锁。

10-08 11:13