Ho più thread di consumo in attesa su un CountDownLatch
di dimensione 1 utilizzando await()
. Ho un thread singolo produttore che chiama countDown()
quando termina correttamente.Come si "annulla" un CountDownLatch?
Questo funziona perfettamente quando non ci sono errori.
Tuttavia, se il produttore rileva un errore, mi piacerebbe che fosse in grado di segnalare l'errore ai thread dei consumatori. Idealmente, potrei fare in modo che il produttore chiami qualcosa come abortCountDown()
e che tutti i consumatori ricevano un'interruzione di interruzione o qualche altra eccezione. Non voglio chiamare countDown()
, perché ciò richiede che tutti i thread dei consumatori eseguano un controllo manuale aggiuntivo per il successo dopo la loro chiamata a await()
. Preferisco semplicemente ricevere un'eccezione, che sanno già come gestire.
So che una funzione di interruzione non è disponibile in CountDownLatch
. Esiste un'altra primitiva di sincronizzazione che posso facilmente adattare per creare efficacemente uno CountDownLatch
che supporti l'annullamento del conto alla rovescia?
Come utilizzare questa classe, La mia situazione è che ho una lista e la lista si aggiorna dinamicamente in tempo reale. C'è un evento automatico in lista su cui devo aspettare 2 minuti ma se tra il tempo di attesa è arrivato il Manuale Utente Event nella lista devo interrompere l'attesa e procedere immediatamente. –