假设我有一个可由两个单独的线程访问的字段。我正在使用对象进行同步锁定。我可以在同步块之外检查null
吗?换句话说,这是线程安全的:
private Object sharedObject() = new Object();
private final Object sharedObjectLock() = new Object();
private void awesomeMethod() {
if(sharedObject != null) {
synchronized(sharedObjectLock) {
//code the uses sharedObject
}
}
}
最佳答案
不可以。在检查之后但在获得锁之前,可能会分配变量。
曾经有一种流派认为同步锁很昂贵,但是现在已经不对了。只要抓住锁。