每当在SO上出现关于Java同步的问题时,有些人非常渴望指出synchronized(this)
应该避免。相反,他们声称,对私有引用的锁定是首选的。
其中一些原因是:
其他人,包括我,认为synchronized(this)
是一个被大量使用的习语(也在Java库中),是安全和易于理解的。它不应该被避免,因为你有一个错误,你不知道你的多线程程序中发生了什么。换句话说:如果它是适用的,那么就使用它。
我感兴趣的是看到一些真实世界的例子(没有foobar的东西),避免锁定this
是更好的,而synchronized(this)
也可以做这项工作。
因此:你应该总是避免synchronized(this)
并将其替换为私有引用上的锁吗?
一些进一步的信息(随着答案的更新):
synchronized(this)
的隐式(synchronized
方法)和显式形式都被考虑synchronized(this)
提供的,那么synchronized(this)
是不适用的,所以这不是问题所在