Ich habe CyclicBarrier
im folgenden Link gelesen
Ссылка .
Im Beispiel 1, CyclicRaceDemo.java
main-Methode, wird CyclicBarrier wiederverwendet, ohne die Methode reset aufzurufen.
Ich habe das Beispiel ausgeführt und es hat gut funktioniert. Also frage ich mich, was die reset
Methode benutzt. Wann sollte es heißen? Oder müssen wir es überhaupt nennen?
A CyclicBarrier
ist zyklisch, da es ohne Zurücksetzen wiederverwendet werden kann. Aus dem Javadoc
Eine Synchronisierungshilfe, die eine Reihe von Threads auf alle warten lässt um einen gemeinsamen Barriere-Punkt zu erreichen. CyclicBarriers sind nützlich in Programmen, die eine feste Gruppe von Threads enthalten, die dies tun müssen gelegentlich auf einander warten. Die Barriere wird zyklisch genannt Es kann wiederverwendet werden, nachdem die wartenden Threads freigegeben wurden.
Wenn also bei normaler Verwendung alle Threads gesammelt und die Barriere aufgebrochen ist, setzt sie sich selbst zurück und kann wieder verwendet werden.
Aus der Javadoc für reset()
Setzt die Schranke auf ihren ursprünglichen Zustand zurück. Wenn es momentan Parteien gibt warten an der Schranke, werden sie mit einem zurückkehren %Code%. Beachten Sie, dass nach einem Bruch zurückgesetzt wird aus anderen Gründen kann es kompliziert sein, sie auszuführen; Threads müssen Synchronisieren Sie auf andere Weise, und wählen Sie eine aus, um das Zurücksetzen durchzuführen. Es kann vorzuziehen sein, stattdessen eine neue Barriere für nachfolgende zu schaffen verwenden.
So BrokenBarrierException
bewirkt, dass alle aktuell wartenden Threads reset
werfen und sofort aufwachen. BrokenBarrierException
wird verwendet, wenn Sie die Barriere "brechen" wollen.
Beachten Sie auch den Vorbehalt - sobald die Threads gewaltsam geweckt wurden, ist es schwierig, sie erneut zu synchronisieren.
TL; DR : Unter normalen Umständen sollten Sie niemals reset
verwenden müssen.
Tags und Links java multithreading concurrency java.util.concurrent cyclicbarrier