Java-потоки и синхронизированные блоки

Предположим, я ' m выполняя синхронизированный блок кода внутри некоторого потока и внутри блока synchronized , я вызываю метод, который порождает другой поток для обработки синхронизированного блока кода, который требует такой же блокировки, как и первый метод. Итак, в псевдо-коде Java:

public void someMethod() {
  synchronized(lock_obj) {
    // a whole bunch of stuff...

    // this is the last statement in the block
    (new Thread(someOtherMethod())).start();
  }
    // some more code that doesn't require a lock
}

public void someOtherMethod() {
  // some setup code that doesn't require a lock

  // return the stuff we want to run in another thread
  // that does require a lock
  return new Runnable() {
    @Override
    public void run() {
      synchronized(lock_obj) {
        // some more code
      }
    }
  };
}

Я понятия не имею, как разобраться в этом коде. Законно ли то, что я написал? Синтаксически я не вижу никаких проблем, но я не уверен, как рассуждать с помощью такого кода. Итак, когда я выполняю someOtherMethod () , чтобы создать экземпляр Runnable , в какой области видимости выполняется код перед выполнением оператора return? Выполняется ли он как часть первого синхронизированного блока? Предположим, что есть другие работающие потоки, которым может потребоваться блокировка lock_obj .

9
задан Shashank Agrawal 19 February 2016 в 09:20
поделиться