Strzeżone zawieszenie
W programowaniu współbieżnym chronione zawieszenie jest wzorcem projektowym oprogramowania do zarządzania operacjami, które wymagają zarówno uzyskania blokady , jak i spełnienia warunku wstępnego przed wykonaniem operacji. Wzorzec strzeżonego zawieszenia jest zwykle stosowany do wywołań metod w programach zorientowanych obiektowo i obejmuje zawieszenie wywołania metody i wątku wywołującego, dopóki warunek wstępny (działanie jako strażnik) nie zostanie spełniony .
Stosowanie
Ponieważ jest to blokowanie , wzór strzeżonego zawieszenia jest zwykle używany tylko wtedy, gdy programista wie, że wywołanie metody zostanie zawieszone na skończony i rozsądny okres czasu. Jeśli wywołanie metody zostanie zawieszone na zbyt długo, cały program zwolni lub zatrzyma się, czekając na spełnienie warunku wstępnego. Jeśli programista wie, że zawieszenie wywołania metody będzie na czas nieokreślony lub na niedopuszczalnie długi okres, preferowany może być wzorzec odrzucania .
Realizacja
W Javie klasa Object udostępnia metody wait()
i notify()
pomagające w bezpiecznym zawieszaniu. W poniższej implementacji, pierwotnie znalezionej w Kuchana (2004) , jeśli nie jest spełniony warunek wstępny, aby wywołanie metody powiodło się, wówczas metoda będzie czekać, aż w końcu wejdzie w prawidłowy stan.
klasa publiczna Przykład { synchronized void guardedMethod () { while ( ! preCondition ()) { try { // Kontynuuj czekanie, czekaj (); // … } catch ( InterruptedException e ) { // … } } // Rzeczywista implementacja zadania } synchronized void alterObjectStateMethod () {
// Zmień stan obiektu // … // Poinformuj oczekujące wątki notify (); } }
Przykładem faktycznej implementacji może być obiekt kolejki z metodą get
, która ma strażnika wykrywającego brak elementów w kolejce. Gdy put
powiadomi inne metody (na przykład metodę get
), metoda get
może opuścić stan chroniony i kontynuować wywołanie. Gdy kolejka będzie pusta, get
ponownie wejdzie w stan chroniony.
Zobacz też
- Wzorzec uchylania się jest alternatywnym wzorcem radzenia sobie z warunkiem wstępnym
- Guarded Command Language zawiera podobną konstrukcję językową
- Blokada czytników i pisarzy
Notatki
-
Kuchana, Partha (2004). „Wzorce projektowe architektury oprogramowania w Javie”. Boca Raton, Floryda: Publikacje Auerbach.
{{ cite journal }}
: Cite journal wymaga|journal=
( pomoc ) .