Почему класс Object имеет методы Thread?

Почему класс Object имеет методы, связанные с потоками, такие как wait(), notify(), notifyAll()?

Нам нужно расширить Thread или реализовать Runnable, чтобы придать классу потокоподобное поведение. Так почему же они не стали частью какого-либо объекта Thread или Runnable?


person sri_sankl    schedule 09.05.2013    source источник
comment
На этот вопрос на самом деле не может окончательно ответить более чем очень небольшая группа людей. Причина в том, что кто-то где-то в какой-то момент почему-то решил сделать каждый объект переменной состояния.   -  person millimoose    schedule 09.05.2013


Ответы (2)


Модель параллелизма Java использует блокировки для реализации взаимоисключающего доступа к объектам в многопоточной среде, и блокировки связаны с каждым объектом в Java (типа «Объект»), а не только с потоками.

1) Ожидание и уведомление - это механизм связи между двумя потоками в Java. И класс Object - правильное место, чтобы сделать их доступными для каждого объекта, поскольку это суперкласс всех объектов.

2) Блокировки доступны для каждого объекта, что является еще одной причиной, по которой ожидание и уведомление объявляются в классе объектов, а не в классе потоков.

person AllTooSir    schedule 09.05.2013
comment
почему java не предоставляет интерфейс для этой функциональности? Почему это должен быть класс Object и применять эту функциональность для всех объектов, когда могут быть случаи, когда все выполнение выполняется в одном потоке? - person MozenRath; 02.01.2014

Если поток заблокирован на экземпляре объекта, вызов notify для этого экземпляра объекта разбудит эти потоки. Таким образом, поскольку блокировка является экземпляром объекта, операции, связанные с этой блокировкой, принадлежат экземпляру объекта.

person Mirko Adari    schedule 09.05.2013