| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Java: Общие вопросы > wait/notify |
| Автор: Aristotelb 19.12.2007, 21:13 | ||
| Почему методы wait/notify/notifyAll не объявлены как synchronized? в чем тайный смысл:
если после вызова wait монитор всеравно отпускается |
| Автор: Dims 19.12.2007, 21:31 |
| Смысл wait в том и состоит: "отпустить ранее захваченный монитор и ждать сигнала notify". Если бы wait было бы объявлено, как synchronized, то оно стало бы бессмысленным, так как оно (1) захватывало бы монитор, а потом (2) сразу же его отпускало бы. Смысл в том, что монитор должен быть захвачен где-то ещё (при помощи seynchronized) потом проделана какая-то работа, которая требует, чтобы на время монитор был отпущен, чтобы другой поток смог тоже поработать над объектом. В простейшем случае захватывается именно тот объект, над которым совместно работают потоки. Например. Кирпичник занял место у стенки (synchronized стенка), положил кирпич (работа), отошёл (wait стенка) и позвал следующего рабочего (notify). Теперь к стенке подошёл растворщик (synchronized стенка), положил раствор (работа), отошёл (wait стенка) и позвал опять кирпичника (notify). Так два потока работают по очереди над одним объектом. Добавлено через 1 минуту и 16 секунд P.S. После wait поток дальше не идёт, он ждёт, пока ему просигналят. И, когда это происходит, он переходит на следующую строчку и опять захватывает монитор. |
| Автор: Aristotelb 19.12.2007, 22:51 |
| Наверное так. Просто читал статью ИМХО классного специалиста по java, там это вопрос выделен отдельным пунктом. http://www.skipy.ru/technics/synchronization.html#wait_notify |