Страницы

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

понедельник, 30 декабря 2019 г.

Чем отличается sleep от wait?

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


Чем отличается TimeUnit.SECONDS.sleep(1); от this.wait(1000)?
    


Ответы

Ответ 1



wait может быть "разбужен" другим потоком с использованием notify, sleep не может. Так же wait (иnotify) должны в быть synchronized блоке. Object obj = ...; synchronized (obj) { obj.wait(); } Пока текущий (выполняющийся) поток - ожидает waits и releases, другой поток может сделать synchronized (obj) { obj.notify(); } (на том же obj) и первый поток проснётся. Можно так же вызвать notifyAll, если более одного потока ожидают - это разбудит их всех. Тем не менее, только один из потоков сможет захватить монитор (т.к. wait в synchronized блоке). Ещё одно различие в том, что wait вызывается на Object, в то время как sleep вызывается на Thread. Если суммировать, то используйте sleep() для time-syncronization и wait() для multi-thread-synchronization.

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

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