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ż

Notatki

  • Kuchana, Partha (2004). „Wzorce projektowe architektury oprogramowania w Javie”. Boca Raton, Floryda: Publikacje Auerbach. {{ cite journal }} : Cite journal wymaga |journal= ( pomoc ) .