java多线程中线程同步工具-CountDownLatch

Java文档解释:CountDownLatch是一个同步工具类,它允许一个或多个线程一直等待,直到其他线程的操作执行完后再执行。

主要方法:
 public CountDownLatch(int count);构造方法,传入count,表示前面有几个线程要先完成。
 public void countDown();  前面要完成的线程执行完后调用该方法,count会-1。
 public void await() throws InterruptedException 要阻塞的线程,我们希望其他线程完成后再执行这个线程,就在这个线程中调用await().

使用:

假如有A ,B ,C三个线程。我们希望A,B完成以后C再执行。

此时,我们先定义出CountDownLatch:

CountDownLatch countDownLatch=new CountDownLatch(2)

在A线程中完成自己的任务后调用:

countDownLatch.countDown();

在B线程中操作完成后调用:

countDownLatch.countDown();

在C线程中执行操作前先调用:

countDownLatch.await();

调用时,我们new出A,B,C三个线程,同时start();然后这三个线程就会按照我们预期的顺序完成。

代码如下:

		final CountDownLatch countDownLatch = new CountDownLatch(2);
		
		Thread A = new Thread(new Runnable() {

			@Override
			public void run() {
				try {
					Thread.sleep(1000);
					System.out.println("A县城");
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} finally {
					countDownLatch.countDown();
				}
			}
		});

		Thread B = new Thread(new Runnable() {

			@Override
			public void run() {
				try {
					Thread.sleep(2000);
					System.out.println("B县城");
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				} finally {
					countDownLatch.countDown();
				}
			}
		});

		Thread C = new Thread(new Runnable() {

			@Override
			public void run() {
				try {
					countDownLatch.await();
				} catch (InterruptedException e) {
					// TODO Auto-generated catch block
					e.printStackTrace();
				}
				System.out.println("C县城");
			}
		});
		
		A.start();
		B.start();
		C.start();

代码中如果没有用到CountDownLatch时输出顺序应该是C,A,B.

加入CountDownLatch后输出顺序为A,B,C.

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值