这似乎很明显,但我想确保我做得对。如果我试图锁定空引用,这将无法正常工作?因为它使用对象的属性而不是引用?
离
Object lock = null;
synchronized(lock)
{
}
答案 0 :(得分:4)
如果我试图锁定空引用,这将无法正常工作?
这是正确的。如果您尝试使用NullPointerException
进行同步,则会获得null
。
因为它使用对象的属性而不是引用?
不完全是。锁定状态不是正常意义上的属性,因为您无法查询它。但是,是的,国家是对象的一部分。
(但请考虑一下。锁定状态怎么可能成为引用的一部分?如果是,您将如何在this
或作为参数传递的对象引用上进行同步?参考文献是作为副本传递...并且对一个副本的更改无法传播到其他副本。如果锁定状态无法传播,则具有自己的引用副本的两个线程无法以任何有意义的方式进行同步。)
答案 1 :(得分:3)
是。同步在对象本身上。