Sobes.tech
Junior — Middle

Java-ში ობიექტზე გამოძახებული wait მეთოდი და Java-ში ნაკადის sleep მეთოდი შორის ძირითადი განსხვავებები რა არის?

sobes.tech AI

პასუხი AI-სგან

Метод wait() вызывается у объекта и используется для приостановки выполнения текущего потока до тех пор, пока другой поток не вызовет notify() или notifyAll() на том же объекте. Для вызова wait() поток должен владеть монитором объекта (быть внутри синхронизированного блока).

Метод sleep() вызывается у потока и приостанавливает выполнение текущего потока на заданный промежуток времени, не освобождая при этом монитор или блокировки.

Ключевые отличия:

  • wait() освобождает монитор объекта и ждет уведомления, sleep() не освобождает монитор и просто приостанавливает поток.
  • wait() используется для межпоточного взаимодействия и синхронизации, sleep() — для задержек.
  • wait() может быть прерван вызовом notify(), notifyAll() или прерыванием, sleep() прерывается только прерыванием.

Пример:

synchronized(obj) {
    while (!condition) {
        obj.wait(); // ждем, пока condition не станет true
    }
    // продолжаем работу
}

// В другом потоке
synchronized(obj) {
    condition = true;
    obj.notify(); // уведомляем ожидающий поток
}

// sleep пример
try {
    Thread.sleep(1000); // приостанавливаем поток на 1 секунду
} catch (InterruptedException e) {
    // обработка прерывания
}