-2

Я имею в виду пример производитель-потребитель от этого siteКак ждать перезагрузки замка?

В обоих производителей и потребителей кода, ждать обернута внутри петли, которая INTURN обернутой внутри синхронизированной блока.

Но один раз wait возвращается, то есть из цикла while, я не понимаю, как поток восстанавливает блокировку, потому что добавление/удаление элемента из очереди все еще находится внутри синхронизированного блока.

Также я считаю, что нам может потребоваться два разных замка, то есть один для потребителя и один для производителя вместо блокировки всей очереди. Потому что я чувствую, что в любой момент потребитель или производитель могут работать в очереди.

Пожалуйста, дайте мне знать, если мое понимание неверно. Также будет здорово, если кто-то может предоставить пример с двумя разными замками.

+2

'wait' освобождает блокировку, ждет, когда кто-то вызовет' notify() ', а затем присоединяется к громовому стаду, чтобы его снова получить. Все это происходит внутри страны. Вам не нужно знать, как это происходит, вам нужно только знать, что это происходит. Ваш второй вопрос не в тему. – EJP

ответ

1

Но однажды ожидания возвращается, т.е. из цикла в то время, я не знаю, как нить будет вновь обретает замок, потому что добавление/удаление элемента из очереди еще внутри синхронизированного блока.

  • Thread (производитель или потребитель) заклинивание в соответствии queue.wait(); без прогрессирования, пока этот поток не получает блокировку.
  • После того, как он приобретет замок, он начнет прогрессировать, выйти из цикла while и прогрессировать до queue.notifyAll();. От queue.notifyAll(); он освобождает замок. Так что другой поток может получить это.

Кроме того, я чувствую, что мы, возможно, потребуется два разных замков, т.е. один для потребителя и один для производителя вместо блокировки всей очереди. Потому что я чувствую себя в любое время, когда потребитель или производитель могут работать в очереди.

Это правда, что либо один из может работать на очереди ОДНОВРЕМЕННО. Но мы нужен только один замок. Причина в том, что у нас есть только один испуганный ресурс (queue). Таким образом, наличие блокировки для этого испуганного ресурса будет гарантировать, что только один может работать над этим в одно и то же время.

Упование вы понимаете пункты. :))

Смежные вопросы