Odpowiedz

4

Co się dzieje, gdy wątek nie może uzyskać semafora (z powodu braku zezwolenia). Czy zostanie przeniesiony do stanu oczekiwania?

Tak. Jeśli mówisz java.util.concurrent.Semaphore (i the aquire method to co się dzieje.

przejmuje zezwolenie od tego semafora, blokowanie dopóki jeden jest dostępny, czy gwint jest przerwany

[...]

Jeżeli zezwolenie nie jest dostępna wówczas bieżący wątek zostaje wyłączone dla celów planowania wątek i drzemie aż jedna z dwóch rzeczy się dzieje:

  • Jakiś inny wątek wywołuje metodę release() dla tego semafora, a bieżącemu wątkowi zostanie przypisane zezwolenie; lub

  • Niektóre inne wątki przerywają bieżący wątek.

tryAquire będzie jednak, jak sama nazwa wskazuje, tylko starać się nabyć blokadę, a zamiast blokowania return false jeśli nie posiada zezwolenia.

Czy wątek zacznie wznawiać poprzednią sekwencję wykonywania, gdy semafor stanie się dostępny.

Tak. Jeśli inny wątek wywoła release, ten wątek może powrócić z acquire i kontynuować jego wykonywanie.

+0

Zostaje przeniesiony do stanu BLOCKED, podobnie jak w przypadku, gdy wątek nie może uzyskać blokady monitora. "stan oczekiwania" w pytaniu prawdopodobnie nie jest właściwym słowem? – blitzkriegz

Powiązane problemy