Wann wird CyclicBarrier in Java Multithreading zurückgesetzt?

8

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?

    
Anand 08.06.2014, 09:11
quelle

1 Antwort

11

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.

    
Boris the Spider 08.06.2014, 09:24
quelle