技术问答-18

CyclicBarrier

昨天写了并发包里的CountDownLatch
今天写一下CyclicBarrier
我理解的CyclicBarrier 的作用就是 比如10个线程 他们会等待彼此都执行完或者都执行完某一部分任务后 才开始一起执行其他任务 有点儿绕

package com.test;import java.util.concurrent.CyclicBarrier;import java.util.concurrent.TimeUnit;public class MyTest {public static void main(String[] args) throws InterruptedException {
		CyclicBarrier barrier = new CyclicBarrier(4);// 开启四个线程for (int i = 0; i < 4; i++) {new MyThread(barrier).start();}//等待第一次全部执行完
		Thread.sleep(10000);
		System.out.println("===============测试可重用==================================");// 开启四个线程 测试CyclicBarrier可以重复使用 CountDownLatch 是不可以重复使用的for (int i = 0; i < 4; i++) {new MyThread(barrier).start();}}}class MyThread extends Thread {
	CyclicBarrier barrier;public MyThread(CyclicBarrier barrier) {this.barrier = barrier;}public void run() {try {
			System.out.println(getName() + "执行第一部分任务");
			TimeUnit.SECONDS.sleep(2);//
			barrier.await();// 等待其他线程执行完成第一部分任务之后 才开始执行第二部分任务
			System.out.println(getName() + "执行第二部分任务");} catch (Exception e) {
			e.printStackTrace();}}}

上边实例 可以看出来 第二部分总是在第一部分执行完成之后才开始执行
技术问答-18

上一篇:Swagger


下一篇:User协同过滤(基于Spark实现)