![]() |
Модераторы: LSD, AntonSaburov |
![]() ![]() ![]() |
|
revenforv |
|
||||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.8.2009 Где: Санкт-Петербург Репутация: нет Всего: нет |
Недавно натолкнулся на такой вот абзац в документации по j2se:
В общем речь про spurious wakeup, т.е. когда поток пробуждается по какой-то мистической причине, а не по вызову нотификаторов, истечению таймаута или прерыванию. В общем, разработчики советуют использовать вместо if(!condition) obj.wait(..); конструкцию описанную выше (т.е. с while). Кому-нибудь в практике программирования встречался случай таких spurious wakeup'ов? Единственный параноидальный вариант, который мне удалось придумать:
Есть вероятность что другая пара YYYWaiter и YYYNotifier, которые к первым двум не имеют никакого отношения тоже используют "" как объект неявной блокировки. А поскольку в java обращения к строкам могут быть оптимизированы, то с "" будет связан один объект блокировки и значит XXXWaiter и YYYWaiter помещены в одну очередь ожидания. Когда YYYNotifier вызовет notifyAll() из очереди выпадут оба, хотя XXXWaiter по-идее и не должен бы, т.к. его мало волнуют условия, покоторым блокируется пара YYY. Пример, конечно искусственный, но вот поэтому и спрашиваю. Может кто знает, более реальный пример? |
||||
|
|||||
LSD |
|
|||
![]() Leprechaun Software Developer ![]() ![]() ![]() ![]() Профиль Группа: Модератор Сообщений: 15718 Регистрация: 24.3.2004 Где: Dublin Репутация: 210 Всего: 538 |
Пример вообще не по теме. В этом примере оба объекта будут использовать один и тот же объект (String Equality and Interning). Я лично с таким не сталкивался, но судя по всему spurious wakeup происходит случайно и практически не воспроизводим. Полагаю что это связанно с механизмами синхронизации которые предоставляются ОС или еще какой нибудь внутренней причиной, связанной с особенностями реализации JVM. Возможно что в современных JVM это и не происходит вовсе. -------------------- Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it. |
|||
|
||||
COVD |
|
|||
Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1655 Регистрация: 26.7.2005 Репутация: 17 Всего: 43 |
Причина сбоя не в коде программы, а в особенностях некоторых операционных систем. Это редкий внутренний сбой, от которого рекомендуют на всякий случай защищаться. Нет смысла пытаться воспроизвести ситуацию средствами java. |
|||
|
||||
revenforv |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 47 Регистрация: 6.8.2009 Где: Санкт-Петербург Репутация: нет Всего: нет |
Ясно. Ответ понятен - вопрос снят.
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "Java" | |
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |