CyclicBarrier
is a synchronization aid that allows a set of threads to all wait for
each other to reach a common barrier point. Cyclic barrier is a
barrier, that all thread must wait at that point, until all the
threads reach this point.
CyclicBarrier class provides two constructors.
1. CyclicBarrier(int parties)
Creates a new CyclicBarrier that will trip when the given number of parties (threads) are waiting upon it, and does not perform a predefined action when the barrier is tripped.
CyclicBarrier class provides two constructors.
1. CyclicBarrier(int parties)
Creates a new CyclicBarrier that will trip when the given number of parties (threads) are waiting upon it, and does not perform a predefined action when the barrier is tripped.
import java.util.concurrent.BrokenBarrierException; import java.util.concurrent.CyclicBarrier; import java.util.logging.Level; import java.util.logging.Logger; public class Producer implements Runnable{ CyclicBarrier barrier = null; int iter = 0; Producer(CyclicBarrier barrier){ this.barrier = barrier; } @Override public void run(){ while(true){ try { barrier.await(); iter++; } catch (InterruptedException | BrokenBarrierException ex) { Logger.getLogger(Producer.class.getName()).log(Level.SEVERE, null, ex); } System.out.println(Thread.currentThread().getName() +": finished " + iter + " times"); } } }
import java.util.concurrent.CyclicBarrier; public class CyclicBarrierEx { public static void main(String args[]){ CyclicBarrier barrier = new CyclicBarrier(5); Producer p1 = new Producer(barrier); Producer p2 = new Producer(barrier); Producer p3 = new Producer(barrier); Producer p4 = new Producer(barrier); Producer p5 = new Producer(barrier); Thread t1 = new Thread(p1); Thread t2 = new Thread(p2); Thread t3 = new Thread(p3); Thread t4 = new Thread(p4); Thread t5 = new Thread(p5); t1.setName("Producer1"); t2.setName("Producer2"); t3.setName("Producer3"); t4.setName("Producer4"); t5.setName("Producer5"); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); } }
Output
Producer2: finished 1 times Producer3: finished 1 times Producer1: finished 1 times Producer5: finished 1 times Producer4: finished 1 times Producer4: finished 2 times Producer1: finished 2 times Producer5: finished 2 times Producer3: finished 2 times Producer2: finished 2 times Producer2: finished 3 times Producer5: finished 3 times Producer1: finished 3 times Producer4: finished 3 times Producer3: finished 3 times Producer3: finished 4 times Producer1: finished 4 times Producer5: finished 4 times Producer2: finished 4 times Producer4: finished 4 times Producer4: finished 5 times Producer1: finished 5 times Producer5: finished 5 times Producer3: finished 5 times Producer2: finished 5 times Producer2: finished 6 times Producer3: finished 6 times Producer5: finished 6 times … … …
2. CyclicBarrier(int parties, Runnable barrierAction)
Creates a new CyclicBarrier that will trip when the given number of parties (threads) are waiting upon it, and which will execute the given barrier action when the barrier is tripped, performed by the last thread entering the barrier.
import java.util.concurrent.CyclicBarrier; public class CyclicBarrierEx { public static void main(String args[]){ CyclicBarrier barrier = new CyclicBarrier(5, new Runnable(){ public void run(){ System.out.println("------------------------------"); } }); Producer p1 = new Producer(barrier); Producer p2 = new Producer(barrier); Producer p3 = new Producer(barrier); Producer p4 = new Producer(barrier); Producer p5 = new Producer(barrier); Thread t1 = new Thread(p1); Thread t2 = new Thread(p2); Thread t3 = new Thread(p3); Thread t4 = new Thread(p4); Thread t5 = new Thread(p5); t1.setName("Producer1"); t2.setName("Producer2"); t3.setName("Producer3"); t4.setName("Producer4"); t5.setName("Producer5"); t1.start(); t2.start(); t3.start(); t4.start(); t5.start(); } }
Output
------------------------------ Producer5: finished 1 times Producer3: finished 1 times Producer2: finished 1 times Producer1: finished 1 times Producer4: finished 1 times ------------------------------ Producer4: finished 2 times Producer3: finished 2 times Producer5: finished 2 times Producer1: finished 2 times Producer2: finished 2 times ------------------------------ Producer2: finished 3 times Producer5: finished 3 times Producer3: finished 3 times Producer4: finished 3 times Producer1: finished 3 times ------------------------------ Producer1: finished 4 times … … …
Prevoius Next Home
No comments:
Post a Comment