Почему wait() и notify() являются частью Object в Java?

Есть ли причина, по которой эти два и notifyAll() часть класса Object вместо класса Thread, где находятся другие методы, связанные с потоком?


person breakline    schedule 11.05.2015    source источник
comment
Я не думаю, что это дубликат этого вопроса. Этот вопрос отвечает, для чего они хороши. Я спрашиваю, почему это в объекте, почему они должны быть в каждом объекте в Java?   -  person breakline    schedule 12.05.2015
comment
в начале Java создатели очень гордились тем, что многопоточность встроена в язык (а не в библиотеку, как C++), и немного охренели от ее продвижения :)   -  person ZhongYu    schedule 12.05.2015
comment
лол, это имеет смысл (вроде) :)   -  person breakline    schedule 12.05.2015
comment
Это объясняется в одном из ответов. Пожалуйста, не читайте только пост с наибольшим количеством голосов.   -  person Luiggi Mendoza    schedule 12.05.2015
comment
та же причина для Vector и т. д. с synchronized везде   -  person ZhongYu    schedule 12.05.2015
comment
Он прав, ответ Натана Хьюза объясняет это.   -  person Rossiar    schedule 12.05.2015
comment
Кажется, я знаю, чего не хватает ОП. Когда вы уведомляете поток, вы не указываете этот поток напрямую, вы указываете объект, чей метод wait() был вызван в этом потоке. Таким образом, вы можете иметь любое количество замков/мониторов, по одному на объект.   -  person    schedule 12.05.2015
comment
Его ответ имеет смысл, но не полностью. Да, любой объект можно использовать в качестве блокировки, но wait() можно использовать только внутри синхронизированного блока, то есть у вас уже есть блокировка, и тогда нет причин для ее реализации каждым объектом. Метод статического потока также может работать.   -  person breakline    schedule 12.05.2015
comment
@ user2710256: нет, метод статического потока не будет работать, так как вы можете иметь несколько блокировок одновременно. Таким образом, вы должны вызвать wait для нужного объекта (хотя ожидание, удерживая другую блокировку, не очень рекомендуется, это требует особой осторожности, чтобы избежать взаимоблокировок). С явными Lock вы даже можете await разных Condition связать с одной блокировкой. Кроме того, было бы очень неестественно иметь synchronized методы экземпляра, но не вызывать связанные wait/notify в том же экземпляре, но в другом классе.   -  person Holger    schedule 12.05.2015
comment
Ключевое слово (не очень хорошо объясненное в ответах на другой вопрос) — монитор (en.wikipedia.org/wiki/Monitor_%28synchronization%29). Авторы Java хотели сделать так, чтобы любой объект мог быть монитором.   -  person Solomon Slow    schedule 12.05.2015