![]() |
Главная Случайная страница Контакты | Мы поможем в написании вашей работы! | |
|
В Java имеется элегантный механизм общения между подпроцессами, основанный на методах wait, notify и notifyAll. Эти методы реализованы, как final-методы класса Object, так что они имеются в любом Java-классе. Все эти методы должны вызываться только из синхронизованных методов. Правила использования этих методов очень просты:
• wait — приводит к тому, что текущий подпроцесс отдает управление и переходит в режим ожидания — до тех пор пока другой под-процесс не вызовет метод notify с тем же объектом.
• notify — выводит из состояния ожидания первый из подпроцессов, вызвавших wait с данным объектом.
• notifyAll — выводит из состояния ожидания все подпроцессы, вызвавшие wait с данным объектом.
Ниже приведен пример программы с наивной реализацией проблемы поставщик-потребитель. Эта программа состоит из четырех простых классов: класса Q, представляющего собой нашу реализацию очереди, доступ к которой мы пытаемся синхронизовать; поставщика (класс Producer), выполняющегося в отдельном подпроцессе и помещающего данные в очередь; потребителя (класс Consumer), тоже представляющего собой подпроцесс и извлекающего данные из очереди; и, наконец, крохотного класса PC, который создает по одному объекту каждого из перечисленных классов.
class Q {
Int n;
synchronized int get() {
System.out.println("Got: " + n);
Дата публикования: 2015-10-09; Прочитано: 182 | Нарушение авторского права страницы | Мы поможем в написании вашей работы!