Подробиці, що стосуються wait і notify

Існує три форми wait і дві форми notify Всі вони входять в клас Object і виконуються для поточного потоку:

public final void wait(long timeout) throws InterruptedException

Виконання поточного потоку призупиняється до отримання повідомлення або до закінчення заданого інтервалу часу timeout Значення timeout задається в мілісекундах Якщо воно дорівнює нулю, то отримання не переривається по тайм-ауту, а продовжується до отримання повідомлення

public final void wait(long timeout, int nanos) throws       InterruptedException

Аналог попереднього методу з можливістю більш точного контролю часу інтервал тайм-ауту являє собою суму двох параметрів: timeout (в мілісекундах) і nanos (в наносекундах, значення в діапазоні 0–999999)

public final void wait() throws InterruptedException

Еквівалентно wait (0) public final void notify()

Посилає сповіщення рівно одному потоку, що очікує виконання деякої умови Потоки, які поновлюються лише після виконання даної умови, можуть викликати одну з різновидів wait При цьому вибрати сповіщаються потік неможливо, тому дана форма notify використовується лише в тих випадках, коли ви точно знаєте, які потоки очікують подій, які це події і скільки триває очікування Якщо ви не впевнені в якому-небудь з цих факторів, ймовірно, слід скористатися методом notifyAll

public final void notifyAll()

Посилає сповіщення всім потокам, що очікують виконання деякої умови Зазвичай потоки стоять, поки якийсь інший потік не змінить деякий умова Використовуючи цей метод, керуючий умовою потік сповіщає всі очікують потоки про зміну умови Потоки, які поновлюються лише після виконання даної умови, можуть викликати одну з різновидів wait

Всі ці методи реалізовані в класі Object Проте вони можуть викликатися тільки з синхронізованих фрагментів, з використанням блокування обєкта, в якому вони застосовуються Виклик може здійснюватися або безпосередньо з такого фрагмента, або побічно – з методу, що викликається в фрагменті Будь-яка спроба звернення до цих методів для обєктів за межами синхронізованих фрагментів, для яких діє блокування, призведе до порушення винятку IllegalMonitorState Exception

Джерело: Арнольд К, Гослінг Д – Мова програмування Java (1997)

Схожі статті:


Сподобалася стаття? Ви можете залишити відгук або підписатися на RSS , щоб автоматично отримувати інформацію про нові статтях.

Коментарів поки що немає.

Ваш отзыв

Поділ на параграфи відбувається автоматично, адреса електронної пошти ніколи не буде опублікований, допустимий HTML: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

*

*