Защищенная подвеска
Эта статья нуждается в дополнительных цитатах для проверки . ( декабрь 2010 г. ) |
В параллельном программировании охраняемая приостановка. [1] — это шаблон проектирования программного обеспечения для управления операциями, которые требуют как блокировки получения , так и выполнения предварительного условия , прежде чем операция может быть выполнена. Шаблон защищенной приостановки обычно применяется к вызовам методов в объектно-ориентированных программах и включает в себя приостановку вызова метода и вызывающего потока до тех пор, пока не будет выполнено предварительное условие (действующее как защитное средство ).
Использование
[ редактировать ]Поскольку шаблон защищенной приостановки является блокирующим , он обычно используется только в том случае, если разработчик знает, что вызов метода будет приостановлен на конечный и разумный период времени. Если вызов метода приостановлен слишком долго, вся программа замедлится или остановится, ожидая выполнения предварительного условия. Если разработчик знает, что приостановка вызова метода будет неопределенной или неприемлемо продолжительной, то шаблон блокировки может оказаться предпочтительным.
Выполнение
[ редактировать ]В Java класс Object предоставляет wait()
и notify()
методы, способствующие безопасному приостановке. В приведенной ниже реализации, первоначально найденной в Kuchana (2004) , если для успешного вызова метода не выполняется предварительное условие, то метод будет ждать, пока он наконец не перейдет в допустимое состояние.
public class Example {
synchronized void guardedMethod() {
while (!preCondition()) {
try {
// Continue to wait
wait();
// …
} catch (InterruptedException e) {
// …
}
}
// Actual task implementation
}
synchronized void alterObjectStateMethod() {
// Change the object state
// …
// Inform waiting threads
notify();
}
}
Примером фактической реализации может быть объект очереди с get
метод, который имеет защиту для обнаружения отсутствия элементов в очереди. Как только put
метод уведомляет другие методы (например, get
метод), то get
метод может выйти из защищенного состояния и продолжить вызов. Как только очередь станет пустой, get
метод снова перейдет в защищенное состояние.
См. также
[ редактировать ]- Шаблон отказа — это альтернативный шаблон для работы с предварительным условием.
- Язык защищенных команд включает аналогичную языковую конструкцию.
- Блокировка чтения и записи
Примечания
[ редактировать ]- ^ Леа, Дуг (2000). Параллельное программирование на Java, второе издание . Ридинг, Массачусетс: Аддисон-Уэсли. ISBN 0-201-31009-0 .
Ссылки
[ редактировать ]- Кучана, Парта (2004). «Шаблоны проектирования архитектуры программного обеспечения в Java» (Документ). Бока-Ратон, Флорида: Публикации Ауэрбаха. .