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