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