![]() |
|
Модераторы: LSD, AntonSaburov |
![]()
|
|
| Aristotelb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 23.3.2007 Где: Саратов Репутация: 4 Всего: 5 |
Почему методы wait/notify/notifyAll не объявлены как synchronized?
в чем тайный смысл:
если после вызова wait монитор всеравно отпускается |
|||
|
||||
| Dims |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1016 Регистрация: 21.11.2006 Репутация: 4 Всего: 11 |
Смысл wait в том и состоит: "отпустить ранее захваченный монитор и ждать сигнала notify". Если бы wait было бы объявлено, как synchronized, то оно стало бы бессмысленным, так как оно (1) захватывало бы монитор, а потом (2) сразу же его отпускало бы.
Смысл в том, что монитор должен быть захвачен где-то ещё (при помощи seynchronized) потом проделана какая-то работа, которая требует, чтобы на время монитор был отпущен, чтобы другой поток смог тоже поработать над объектом. В простейшем случае захватывается именно тот объект, над которым совместно работают потоки. Например. Кирпичник занял место у стенки (synchronized стенка), положил кирпич (работа), отошёл (wait стенка) и позвал следующего рабочего (notify). Теперь к стенке подошёл растворщик (synchronized стенка), положил раствор (работа), отошёл (wait стенка) и позвал опять кирпичника (notify). Так два потока работают по очереди над одним объектом. Добавлено через 1 минуту и 16 секунд P.S. После wait поток дальше не идёт, он ждёт, пока ему просигналят. И, когда это происходит, он переходит на следующую строчку и опять захватывает монитор. |
|||
|
||||
| Aristotelb |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 55 Регистрация: 23.3.2007 Где: Саратов Репутация: 4 Всего: 5 |
Наверное так.
Просто читал статью ИМХО классного специалиста по java, там это вопрос выделен отдельным пунктом. статья Это сообщение отредактировал(а) Aristotelb - 20.12.2007, 18:58 |
|||
|
||||
![]()
|
| Правила форума "Java" | |
|
|
Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Java: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |