声明一个锁定对象非final。这只是一个理论问题吗?

时间:2015-11-17 06:13:56

标签: java multithreading locking

我正在阅读J.Bloch的有效Java,现在我正在关于记录线程安全的部分。他提供了一个使用锁的例子:

ab

并说:

  

请注意,private final Object lock = new Object(); public void foo(){ synchronized(lock){ ... } } 字段已声明为lock。这可以防止你   无意中改变了其内容,这可能导致   对包含对象的灾难性非同步访问。

我们是否应该坚持规则总是声明锁定对象最终?从第一眼看,我可以看到,如果一个线程修改了synchronized块中的final,并且其他一些线程在修改后立即尝试获取修改对象的监视器(它是免费的)。但在我看来,这是一个理论问题"很难在实践中复制。也许我错过了什么?

0 个答案:

没有答案