1

这似乎很明显,但我想确保我做对了。如果我尝试锁定空引用,这将无法正常工作?因为它使用对象的属性而不是引用?

前任

Object lock = null;

synchronized(lock)
{
}
4

2 回答 2

4

如果我尝试锁定空引用,这将无法正常工作?

那是对的。如果您NullPointerException尝试使用null.

因为它使用对象的属性而不是引用?

不完全是。锁定状态不是通常意义上的属性,因为您无法查询它。但是,是的,状态是对象的一部分。

(但是想一想。锁状态怎么可能是引用的一部分?如果是,您将如何同步this或作为参数传递的对象引用?引用作为副本传递......和一个对一个副本的更改无法传播到其他副本。如果锁定状态无法传播,则具有自己的引用副本的两个线程无法以任何有意义的方式同步。)

于 2012-04-16T08:32:55.303 回答
3

是的。同步在对象本身上。

于 2012-04-16T08:22:14.647 回答