Код: Выделить всё
public void doRun() {
synchronized (this) {
run();
}
}
private void run() {
synchronized (map) {
// Manipulate map
}
// Do other things
synchronized (map) {
// Manipulate map
}
}
Код: Выделить всё
map
С этим кодом я столкнулся с тупиком, когда поток A владел монитором на этом , а поток B имел владение монитором на карте, и оба ждали на другом мониторе.
Но я не понимаю, как это вообще возможно. Если поток B владеет монитором на карте, как он может не владеть и монитором на этом?
Это кажется невозможным, учитывая приведенный выше код, поскольку для входа в run() требуется владение монитором, а право собственности на монитор на карте приобретается только внутри run().
Что-то мне здесь не хватает?
Подробнее здесь: https://stackoverflow.com/questions/786 ... n-the-code