24
Feb
Steps to implement Cyclic Barrier
Steps to implement Cyclic Barrier
===================================
Step 1: Create your custom implementation of Runnable implementations, eg.
package JavaConcurrency;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class ExampleRunnable1 implements Runnable {
private String threadName;
private int wait;
private CyclicBarrier cb;
public ExampleRunnable1(String n, int w, CyclicBarrier c) {
this.threadName = n;
this.wait = w;
this.cb = c;
}
public void run() {
try {
System.out.println("From T1 cb"+cb.getNumberWaiting());
cb.await();
} catch (InterruptedException | BrokenBarrierException e) {
e.printStackTrace();
}
}
}
Similarly implement "ExampleRunnable2", "ExampleRunnable3"....
Step 2: Create your custom implementation of Runnable to trigger Finish Event (once Cyclic barrier count is reached)
package JavaConcurrency;
public class CyclicBarrierFinishEvent implements Runnable {
public void run() {
System.out.println(
"As 3 threads have reached common barrier point " + ", CyclicBarrrierFinishEvent has been triggered");
System.out.println("You can update shared variables if any");
}
}
Step 3: Client
package JavaConcurrency;
import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;
public class Client {
public static void main(String[] args) throws InterruptedException, BrokenBarrierException {
CyclicBarrier cb = new CyclicBarrier(3, new CyclicBarrierFinishEvent());
Thread t1 = new Thread(new ExampleRunnable1("T1", 1, cb));
Thread t2 = new Thread(new ExampleRunnable2("T2", 1, cb));
Thread t3 = new Thread(new ExampleRunnable3("T3", 1, cb));
t1.start();
t2.start();
t3.start();
cb.reset();
}
}
Output:
From T1 cb0
From T3 cb0
From T2 cb0
As 3 threads have reached common barrier point , CyclicBarrrierFinishEvent has been triggered
You can update shared variables if any
http://defectracker.com/wp-content/uploads/2020/02/JavaConcurrency-CyclicBarrierExample.7z
0 comments