Страницы

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

среда, 19 декабря 2018 г.

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

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


Ответ

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.

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

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