CyclicBarrier和CountDownLatch例子

CyclicBarrier例子

package com.cangku;

import java.util.concurrent.BrokenBarrierException;
import java.util.concurrent.CyclicBarrier;

public class Cyclic implements Runnable {
	private CyclicBarrier cyclicBarrier;

	public Cyclic(CyclicBarrier cyclicBarrier) {
		super();
		this.cyclicBarrier = cyclicBarrier;
	}

	@Override
	public void run() {
		System.out.println(Thread.currentThread().getName() + "准备好了...");
		try {
			cyclicBarrier.await();
		} catch (InterruptedException | BrokenBarrierException e) {
			e.printStackTrace();
		}
		System.out.println(Thread.currentThread().getName() + "起跑");
	}

	public static void main(String[] args) {
		CyclicBarrier cyc = new CyclicBarrier(5);
		for (int i = 0; i < 5; i++) {
			new Thread(new Cyclic(cyc)).start();;
		}
	}
}

结果:Thread-1准备好了...
Thread-4准备好了...
Thread-0准备好了...
Thread-3准备好了...
Thread-2准备好了...
Thread-2起跑
Thread-1起跑
Thread-0起跑
Thread-3起跑

Thread-4起跑

CountDownLatch

package com.cangku;

import java.util.concurrent.CountDownLatch;

public class Count implements Runnable{
	private CountDownLatch countDownLatch;

	public Count(CountDownLatch countDownLatch) {
		super();
		this.countDownLatch = countDownLatch;
	}


	@Override
	public void run() {
		System.out.println("总共有"+countDownLatch.getCount()+"人打车");
		try {
			countDownLatch.await();
		} catch (InterruptedException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		System.out.println("开车");
	}
	public static void main(String[] args) {
		CountDownLatch c = new CountDownLatch(5);
		new Thread(new Count(c)).start();
		for (int i = 0; i <5; i++) {
			new Thread(new Runnable() {
				@Override
				public void run() {
					System.out.println(Thread.currentThread().getName()+"已到达");
					c.countDown();
				}
			}).start();;
		}
	}
}

结果

总共有5人打车
Thread-2已到达
Thread-4已到达
Thread-3已到达
Thread-1已到达
Thread-5已到达
开车

CyclicBarrier一般是阻塞子线程

CountDownLatch是阻塞主线程

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值