Я несколько раз сталкивался с кодом, подобным следующему
class Foo {
private Object lock = new Object();
public void doSomething() {
synchronized(lock) {
...
Что меня интересует, так это то, почему вместо записи synchronized(this)
создается объект блокировки? Это там, чтобы включить совместное использование блокировки? Я смутно помню, что читал, что это оптимизация. Это правда? Кроме того, имеет ли смысл в каком-то контексте объявлять блокировку как final
?