/ / Notifica seguita da un'altra notifica [duplicata] - java, multithreading, blocco, notifica

Notifica seguita da un'altra notifica [duplicato] - java, multithreading, blocco, notifica

Cosa succede se si notifica un blocco eavvisare immediatamente il blocco? Supponiamo che ci siano 2 o più thread in attesa su quel blocco. È garantito che due thread vengano riattivati? Oppure è possibile che solo un thread venga riattivato, il che significa che la seconda notifica diventa obsoleta?

lock.notify();
lock.notify();

Grazie!

risposte:

5 per risposta № 1

Supponiamo che ci siano 2 o più thread in attesa su quel blocco. È garantito che due thread vengano riattivati?

Sì. Ogni notifica prende una discussione dalla coda di attesa e la inserisce nella coda bloccata - il thread sveglia deve prima ottenere l'accesso alla synchronized blocco in questione. Se c'è solo 1 filo in attesa sul lucchetto, il secondo notify() non farei niente

È importante rendersi conto che il filo sarà non inizia a eseguire immediatamente. Dal momento che doveva essere in a synchronized bloccare lock essere in grado di fare il wait() deve accedere a lock ancora prima che possa funzionare. Potrebbero esserci più altri thread già nella coda dei blocchi, in attesa di accesso lock.


0 per risposta № 2

Sospetto che il comportamento sarebbe simile alla chiamata a notifyAll () (in questo caso è più simile a notifyTwo ())

I fili risvegliati competeranno nel solitomodo con qualsiasi altro thread che potrebbe competere attivamente per la sincronizzazione su questo oggetto; ad esempio, i thread risvegliati non godono di alcun privilegio o svantaggio affidabile nell'essere il thread successivo per bloccare questo oggetto.