2012-04-16 32 views
1

这似乎很明显,但我想确保我正确执行此操作。如果我试图获得对空引用的锁定,这将无法正确工作?因为它使用对象的属性而不是引用?使用对象引用作为互斥锁

Object lock = null; 

synchronized(lock) 
{ 
} 

回答

4

如果我试图获得对空引用的锁这将无法工作正确吗?

这是正确的。如果您尝试使用null进行同步,您将获得NullPointerException

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

不完全是。锁定状态不是正常意义上的属性,因为您无法对其进行查询。但是,是的,国家是对象的一部分。如果是,你将如何在this上同步或作为参数传递的对象引用?引用是作为副本传递的...并且对一个副本的更改不能传播给其他人,并且如果锁定状态不能传播,那么具有它们自己的参考副本的两个线程无法以任何有意义的方式进行同步。)

+0

锁状态通常表示(部分)在对象的头部,尽管这取决于实现。 JIT编译器将发出在锁定或释放锁定时实现所需语义的本机指令。这些也是实施相关的。 – 2013-09-17 16:01:04

3

是。同步在对象本身上。