risposta

4

Cosa succede quando un thread non può acquisire un semaforo (a causa della mancanza di permesso). Sarà spostato nello stato di attesa?

Sì. Se stai parlando java.util.concurrent.Semaphore (e the aquire method questo è ciò che accade:.

acquista un permesso da questo semaforo, bloccando fino a quando uno è disponibile, o il filo si interrompe

[...]

Se nessun permesso è disponibile, il thread corrente viene disabilitato per fini di programmazione filo e giace dormiente fino a quando una delle due cose accade:

  • Qualche altro thread richiama il metodo release() per questo semaforo e al thread corrente viene assegnato un permesso; oppure

  • Alcuni altri thread interrompono il thread corrente.

tryAquire sarà tuttavia, come suggerisce il nome, solo tenterà di acquisire la serratura, e invece di bloccare restituire false se non abbia un permesso.

Il thread inizia a riprendere la sequenza di esecuzione precedente, quando il semaforo diventa disponibile.

Sì. Se un altro thread chiama release, questo thread può tornare da acquire e continuare la sua esecuzione.

+0

Quindi viene spostato nello stato BLOCCATO, come accade quando un thread non riesce ad acquisire un blocco monitor. "lo stato di attesa" nella domanda probabilmente non è la parola giusta? – blitzkriegz

Problemi correlati