Мне нужно очистить некоторые моменты относительно синхронизации на уровне блока.синхронизация на уровне блока
предположим следующие блоки синхронизации являются в том же методе класса:
class A{
some_method(){
//BLOCK1
synchronized(OBJ1){
shared code...
}
//BLOCK2
synchronized(OBJ1){
shared code...
}
//BLOCK3
synchronized(OBJ2){
shared code...
}
}
}
следующие запросы:
1) Правильно ли это, что если один поток поступает block1, получив блокировку на obj1, то ни один другой поток не может войти в Block2 до тех пор, пока первый поток удерживает блокировку на OBJ1, но другой поток может одновременно запускать блок3?
2) Нужно ли первой резьбе снова получить блокировку OBJ1, если она входит в блок2 после завершения блока1?
3) если первая нить вызывает некоторый код в блоке2, из блока 1, то он должен будет освободить блокировку на OBJ1 получить во время первого выполнения блока и снова получить его ИЛИ получить то же самое, что и при первом блоке?
Теперь предположим, что block1 находится в методе одного класса и blockk2 и 3 в методе какого-либо другого класса
4) То же, что и в пункте 1 справедливо как синхронизация происходит посредством получения блокировки на некоторых третьего класса obj (OBJ1, OBJ2)?
это домашнее задание? – mata
[Учебники по Java: синхронизированные методы] (http://docs.oracle.com/javase/tutorial/essential/concurrency/syncmeth.html) – matthewnreid