где потоки просыпаются от Object.notifyAll и не могут получить блокировку? - PullRequest
0 голосов
/ 01 мая 2019

Ниже показано, как работает монитор: монитор

  • Потоки в наборе ожидания активируются при вызове Object.notifyAll ().
  • Только один из них получает блокировку, а остальные снова блокируются.
  • Так куда же делись заблокированные потоки? Вернутся ли они к набору ожидания или перейдут к набору записей? Или это управляется ОС, потому что монитор зависит от ОС MutexLock?

1 Ответ

0 голосов
/ 01 мая 2019

Монитор - это фундаментальная концепция, которую вы должны понимать.Об этом лучше где-то почитать.

Короче, могу сказать, что есть несколько основных принципов:

  1. Если поток входит в синхронизированный блок - монитор синхронизируетсяобъект заблокирован, и все остальные потоки не смогли выполнить синхронизированный блок (они находятся в наборе ввода).
  2. Если вы вызываете метод wait () для синхронизированного объекта, то поток переходит к ожиданию набора
  3. Если вы вызываете метод notify () / notifyAll () для синхронизированного объекта, это означает, что один / все потоки переходят в набор ввода из набора ожидания.

Ответ на ваш вопросis - когда вы вызываете метод notifyAll (), все потоки из набора ожидания переходят в набор ввода.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...