CyclicBarrier的用法

         CyclicBarrier,是一个同步辅助类,可以实现让一组线程互相等待,直到某一状态后(common barrier point公共屏障点)再全部同时执行(并发动作)。

         而且barrier在释放等待线程后可以重复使用,所以称为循环的barrier。

         CyclicBarrier支持可选的runnable命令,在一组线程的最后一个线程到达barrier后,会执行这个runnable命令一次。

public class CyclicBarrierDemo {
	public static void main(String[] args) {
		int N = 4;
		// 在CyclicBarrier()增加runnable参数后,从结果可以看出,当四个线程的最后一个线程都到达barrier状态后,会运行这个Runnable命令
		CyclicBarrier barrier = new CyclicBarrier(N, new Runnable() {
			@Override
			public void run() {
				System.out.println("当前线程" + Thread.currentThread().getName());
			}
		});
		for (int i = 0; i < N; i++) {
			new Writer(barrier).start();
		}
	}

	static class Writer extends Thread {
		private CyclicBarrier cyclicBarrier;

		public Writer(CyclicBarrier cyclicBarrier) {
			this.cyclicBarrier = cyclicBarrier;
		}

		public void run() {
			System.out.println("线程" + Thread.currentThread().getName()
					+ "正在写入数据...");
			try {
				Thread.sleep(5000);// 以睡眠来模拟写入数据操作
				System.out.println("线程" + Thread.currentThread().getName()
						+ "写入数据完毕,等待其他线程写入完毕");
				cyclicBarrier.await();
			} catch (InterruptedException e) {
				e.printStackTrace();
			} catch (BrokenBarrierException e) {
				e.printStackTrace();
			}
			// 待所有线程都执行完后,才继续执行此句
			System.out.println("所有线程写入完毕,继续处理其他任务...");
		}
	}
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值