Czego właściwie używasz w tej metodzie lockInterruptibly
? Przeczytałem API, ale nie jest to dla mnie jasne. Czy ktokolwiek mógłby wyrazić to innymi słowami?Rzeczywiste użycie blokady w celu ponownego użycia ReentrantLock
7
A
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.
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()
.
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
Każdy wątek może przerwać wątek, nie musi to być ten, który trzyma blokadę. –
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