Вопрос

Вопрос по API Java 6.Вызывает ли LockSupport.unpark(thread) иметь случается - до того, как отношение к возврату из LockSupport.park в только что распакованном потоке?Я сильно подозреваю, что ответ "да", но Javadoc, похоже, не упоминает об этом явно.

Это было полезно?

Решение

Я просмотрел код JDK и обнаружил, что методы LockSupport обычно вызываются вне блоков синхронизации.Итак, ваше предположение кажется верным.

Другие советы

Я только что нашел этот вопрос, потому что задавал себе то же самое.Согласно эта статья автор : исследователь Oracle Дэвид Дайс, ответ , по - видимому , таков НЕТ.Вот соответствующая часть статьи:

Если поток заблокирован в park() мы гарантируем, что последующее unpark() я сделаю это готовым.Совершенно законный, но некачественный внедрение park() и unpark() были бы пустые методы, в которых программа вырождается в простое вращение. Фактически, это лакмусовая бумажка для правильного park()-unpark() использование.

Пустой park() и unpark() методы не дают вам никаких случается - до того, как гарантии взаимосвязи, поэтому для того, чтобы ваша программа была переносимой на 100%, вы не должны полагаться на них.

С другой стороны, Javadoc из LockSupport говорит:

Эти методы предназначены для использования в качестве инструментов для создания утилит синхронизации более высокого уровня и сами по себе не являются полезными для большинства приложений управления параллелизмом.Тот самый park метод предназначен для использования только в конструкциях формы:

while (!canProceed()) { ... LockSupport.park(this); }

Поскольку вы все равно должны явно проверить какое-то условие, которое либо будет включать volatile или должным образом синхронизированные переменные, слабые гарантии park() на самом деле это не должно быть проблемой, не так ли?

Если это не задокументировано как таковое, то вы НЕ МОЖЕТЕ полагаться на то, что это создаст отношение "произойдет раньше".

В частности LockSupport.java в коде Hotspot просто вызывает Unsafe.park и .unpark!

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

Помните, что если это не задокументировано как создание случается - до того, как отношения, то вы должен относитесь к этому так, как будто этого нет, даже если вы можете доказать, что это так в вашей конкретной системе.Будущие системы и реализации могут этого не сделать.Они оставили себе эту свободу по уважительной причине.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top