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