Синхронизирован с фиктивным объектом вместо этого

Я несколько раз сталкивался с кодом, подобным следующему

class Foo {
   private Object lock = new Object();

   public void doSomething() {
      synchronized(lock) {
        ...

Что меня интересует, так это то, почему вместо записи synchronized(this)создается объект блокировки? Это там, чтобы включить совместное использование блокировки? Я смутно помню, что читал, что это оптимизация. Это правда? Кроме того, имеет ли смысл в каком-то контексте объявлять блокировку как final?

12
задан Karolis Juodelė 30 June 2012 в 15:45
поделиться