Страницы

Поиск по вопросам

воскресенье, 8 декабря 2019 г.

Почему wait/notify/notifyAll методы определены в классе Object, а не в классе Thread?

#java #многопоточность


Почему wait/notify/notifyAll методы определены в классе Object, а не в классе Thread?
    


Ответы

Ответ 1



На самом деле интересный вопрос. В java объекты могут выступать в роли mutex'ов, т.е. участвовать в процессе разграничения доступа к ресурсам между различными потоками. С помощью synchronized блока и методов wait, notify, notifyAll. Соответственно, доступ к этому объекту должен быть для всех потоков, желающих получить монопольное право на ресурс. Отсюда и вытекает ответ на ваш вопрос - почему эти методы не находятся в классе Thread. Если бы это было так, другим потокам пришлось бы хранить информацию о других потоках (ожидающих доступ к ресурсу) и самостоятельно, заниматься их пробуждением, в момент освобождения ресурса, что согласитесь не очень удобно 🙂

Ответ 2



Потому что эти методы относятся, непосредственно, к объекту. Таким образом можно выполнять блокировку на любом объекте Java, заставляя очередь потоков бороться за захват монитора текущего объекта.

Комментариев нет:

Отправить комментарий