java的CyclicBarrier

来源:互联网 发布:老挝嫖尸妓院图片知乎 编辑:程序博客网 时间:2024/06/07 00:07

在Java中CyclicBarrier的用途个人理解主要用在线程的同步,可以让多个线程之间进行等待,如果线程达到设置的线程那么就可以继续往下运行,例如:

import java.util.concurrent.CyclicBarrier;public class CyclicBarrierDemo {public static void main(String[] args) {Runnable barrier1Action = new Runnable() {public void run() {System.out.println("BarrierAction 1 executed ");}};Runnable barrier2Action = new Runnable() {public void run() {System.out.println("BarrierAction 2 executed ");}};CyclicBarrier barrier1 = new CyclicBarrier(2, barrier1Action);CyclicBarrier barrier2 = new CyclicBarrier(2, barrier2Action);CyclicBarrierRunnable barrierRunnable1 = new CyclicBarrierRunnable(barrier1, barrier2);CyclicBarrierRunnable barrierRunnable2 = new CyclicBarrierRunnable(barrier1, barrier2);new Thread(barrierRunnable1).start();new Thread(barrierRunnable2).start();}}

mport java.util.concurrent.BrokenBarrierException;import java.util.concurrent.CyclicBarrier;public class CyclicBarrierRunnable implements Runnable {CyclicBarrier barrier1 = null;CyclicBarrier barrier2 = null;public CyclicBarrierRunnable(CyclicBarrier barrier1, CyclicBarrier barrier2) {this.barrier1 = barrier1;this.barrier2 = barrier2;}public void run() {try {Thread.sleep(1000);System.out.println(Thread.currentThread().getName() + " waiting at barrier 1");this.barrier1.await();Thread.sleep(1000);System.out.println(Thread.currentThread().getName() + " waiting at barrier 2");this.barrier2.await();System.out.println(Thread.currentThread().getName() + " done!");} catch (InterruptedException e) {e.printStackTrace();} catch (BrokenBarrierException e) {e.printStackTrace();}}}


原创粉丝点击