risposta

11

A CyclicBarrier è ciclico perché può essere riutilizzato senza reimpostare. Dall'aiuto Javadoc

Una sincronizzazione che permette ad un gruppo di fili a tutti aspettare vicenda per raggiungere un punto barriera comune. CyclicBarriers sono utili in programmi che coinvolgono una parte di thread di dimensioni fisse che devono occasionalmente attendere l'un l'altro. La barriera si chiama ciclico perché può essere riutilizzato dopo che i thread in attesa sono stati rilasciati.

Quindi, nel normale utilizzo, una volta che tutti i thread sono stati raccolti e la barriera è rotta, si reimposta e può essere riutilizzata.

Dalle Javadoc for reset()

reimposta la barriera al suo stato iniziale. Se una delle parti è attualmente in attesa presso la barriera, verrà restituito con uno BrokenBarrierException. Si noti che si resetta dopo una rottura si è verificato per altri motivi può essere complicato da svolgere; i thread devono risincronizzarsi in qualche altro modo e scegliere uno per eseguire il reset. Potrebbe essere preferibile creare una nuova barriera per il successivo utilizzo di .

Così reset provoca eventuali discussioni attualmente in attesa di lanciare un BrokenBarrierException e il servizio immediatamente. reset viene utilizzato quando si desidera "rompere" la barriera.

Nota anche l'avvertenza: una volta che i thread sono stati risvegliati forzatamente, è difficile sincronizzarli di nuovo.

TL; DR: non si dovrebbe mai essere necessario utilizzare reset() in circostanze normali.

+0

Cosa intendi per "difficile"? È la stessa parola che viene dalla javadoc che non capisco. Significa che è difficile risincronizzare la barriera quando è nel mezzo della gestione della rottura (causata dal 'reset()'), poi alcuni altri thread arrivano e chiedono una ... barriera? – Leo