Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> wait/notify, почему нe synchronized? 
V
    Опции темы
Aristotelb
Дата 19.12.2007, 21:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 23.3.2007
Где: Саратов

Репутация: 4
Всего: 5



Почему методы wait/notify/notifyAll не объявлены как synchronized?

в чем тайный смысл:
Код

synchronized(sync){
   sync.wait();
..............
}

если после вызова wait монитор всеравно отпускается
PM MAIL ICQ   Вверх
Dims
Дата 19.12.2007, 21:31 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1016
Регистрация: 21.11.2006

Репутация: 4
Всего: 11



Смысл wait в том и состоит: "отпустить ранее захваченный монитор и ждать сигнала notify". Если бы wait было бы объявлено, как synchronized, то оно стало бы бессмысленным, так как оно (1) захватывало бы монитор, а потом (2) сразу же его отпускало бы.

Смысл в том, что монитор должен быть захвачен где-то ещё (при помощи seynchronized) потом проделана какая-то работа, которая требует, чтобы на время монитор был отпущен, чтобы другой поток смог тоже поработать над объектом.

В простейшем случае захватывается именно тот объект, над которым совместно работают потоки.

Например. Кирпичник занял место у стенки (synchronized стенка), положил кирпич (работа), отошёл (wait стенка) и позвал следующего рабочего (notify). Теперь к стенке подошёл растворщик (synchronized стенка), положил раствор (работа), отошёл (wait стенка) и позвал опять кирпичника (notify).

Так два потока работают по очереди над одним объектом.

Добавлено через 1 минуту и 16 секунд
P.S. После wait поток дальше не идёт, он ждёт, пока ему просигналят. И, когда это происходит, он переходит на следующую строчку и опять захватывает монитор.
PM MAIL   Вверх
Aristotelb
Дата 19.12.2007, 22:51 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 55
Регистрация: 23.3.2007
Где: Саратов

Репутация: 4
Всего: 5



Наверное так. 

Просто читал статью ИМХО классного специалиста по java, там это вопрос выделен отдельным пунктом.

статья

Это сообщение отредактировал(а) Aristotelb - 20.12.2007, 18:58
PM MAIL ICQ   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0423 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.