Внутренние блокировки и синхронизация в Java - PullRequest
0 голосов
/ 07 января 2019

Согласно документации Oracle для Внутренние блокировки и синхронизация :

Собственные блокировки играют роль в обоих аспектах синхронизации: обеспечение исключительного доступа к состоянию объекта и создание отношения, которые происходят до того, как они станут важными для видимости.

Мой вопрос:

что происходит до того, как отношения здесь означают в контексте синхронизации? Означает ли это, что, как только поток выполняет синхронизированный блок, все изменения сбрасываются в основную память, прежде чем другой поток придет и снова получит блокировку?

Также у меня есть еще один вопрос:

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

Возможно ли для JVM / планировщика потока принудительно thread1 перевести в другое состояние, скажем wait , так что он снимет блокировку, а другой поток скажет thread2 получит замок? Теперь через некоторое время thread1 может снова перейти в рабочее состояние и начать с того места, где он потерял блокировку.

1 Ответ

0 голосов
/ 07 января 2019

что происходит до того, как отношения здесь означают синхронизацию контекст?

Это отношение является просто гарантией того, что запись памяти одним конкретным оператором видна другому конкретному оператору. В этом случае это означает, что когда вы записываете что-то в синхронизированный блок, другие потоки, которые входят в синхронизированный блок, заметят это изменение.

Возможно ли для JVM / планировщика потока принудительно заставить thread1 другое состояние скажи подожди, чтобы он снял блокировку, а другое нить скажет нить2 получит блокировку?

Нет, хотя поток может снять блокировку, вызвав wait.

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