Sobes.tech
Junior — Middle

Mis on meetodi notifyAll() eesmärk Object klassis ja millistes olukordades seda tuleks kasutada?

sobes.tech AI

Vastus AI-lt

Метод notifyAll() класса Object в Java используется для пробуждения всех потоков, которые ожидают на данном объекте (то есть вызвали wait() на этом объекте).

Назначение:

  • Когда состояние объекта изменяется так, что все ожидающие потоки могут продолжить работу, вызывается notifyAll(), чтобы разбудить их всех.

Когда применять:

  • Если несколько потоков ждут определённого условия, и изменение этого условия может позволить продолжить работу нескольким из них, нужно использовать notifyAll(), чтобы избежать ситуации, когда некоторые потоки останутся заблокированными.

Пример:

synchronized(obj) {
    // изменение состояния
    obj.notifyAll(); // пробуждаем всех ожидающих
}

Важно: notifyAll() следует использовать, когда несколько потоков могут быть разбужены и продолжить работу, в отличие от notify(), который пробуждает только один поток.