2013-07-23 11 views

Odpowiedz

3

Logika jest taka sama jak dla wszystkich metod blokowania przerywalnego: umożliwia natychmiastową reakcję wątku na sygnał interrupt wysłany z innego wątku.

Sposób korzystania z tej konkretnej funkcji zależy od projektu aplikacji. Na przykład może być użyty do zabicia kontyngentu wątków w puli, które czekają na zdobycie blokady.

+0

Jak stwierdzono "pozwala to wątkowi natychmiast reagować na sygnał przerwania wysłany do niego z innego wątku", oznacza to, że gdy wątek wywoła lockInterruptibly(), będzie czekać na sygnał przerwania z innego wątku, chyba że blokada jest natychmiast dostępna dla zdobyć to ?. Wątek, który wysyła sygnał przerwania, zatrzymuje blokadę do momentu przerwania sygnałów? – MKod

+0

Każdy wątek może przerwać wątek, nie musi to być ten, który trzyma blokadę. –

+0

Przerwania wątków Java różnią się od przerwań sprzętowych lub systemowych. Przerwa w dostarczaniu jest synchroniczna i nie ma charakteru wyprzedzającego, a nie asynchronicznego i zapobiegawczego, tj. Nie występują one w dowolnym punkcie i nie wstrzymują (i nie wznawiają) uruchomionego kodu. Program musi je przetestować jawnie. Więc, czy mówisz, że 'lockInterruptibly' ciągle testuje je jawnie? – overexchange

7

lockInterruptibly() może zablokować, jeśli blokada jest już zajęta przez inny wątek i będzie czekać, aż blokada zostanie nabyta. Jest to takie samo, jak w przypadku zwykłego lock(). Ale jeśli inny wątek przerywa oczekujący wątek, zostanie on zgłoszony jako lockInterruptibly().

Powiązane problemy