#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.
Комментариев нет:
Отправить комментарий