锁系列:共享锁CountDownLatch,实现主线程等待子线程任务完成后,再继续执行。
Posted zhangjin1120
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了锁系列:共享锁CountDownLatch,实现主线程等待子线程任务完成后,再继续执行。相关的知识,希望对你有一定的参考价值。
上效果图:
大致步骤就是:
在主线程中新建CountDownLatch对象latch
,调用latch.await()
, 并将对象传入子线程,子线内部任务完成时调用latch.countDown()
。
- 代码如下:
public class CountDownLatchTest {
public static void main(String[] args) {
try {
System.out.println(getCurrentTimeStr() + Thread.currentThread().getName() + "等待子线程从仓库取货");
CountDownLatch latch = new CountDownLatch(1);
GetGoodsThread thread = new GetGoodsThread(latch);
thread.start();
latch.await();
System.out.println(getCurrentTimeStr() + Thread.currentThread().getName() + "开始送货");
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
private static final SimpleDateFormat sdf = new SimpleDateFormat("MM-dd hh:mm:ss");
public static String getCurrentTimeStr() {
return sdf.format(new Date()) + ": ";
}
static class GetGoodsThread extends Thread {
CountDownLatch latch;
public GetGoodsThread(CountDownLatch latch) {
this.latch = latch;
}
@Override
public void run() {
try {
System.out.println(getCurrentTimeStr() + Thread.currentThread().getName() + "去仓库");
Thread.sleep(1000);
System.out.println(getCurrentTimeStr() + Thread.currentThread().getName() + "找货");
Thread.sleep(1000);
System.out.println(getCurrentTimeStr() + Thread.currentThread().getName() + "回来");
Thread.sleep(1000);
latch.countDown();
} catch (Exception e) {
System.out.println(e.getMessage());
e.printStackTrace();
}
}
}
}
以上是关于锁系列:共享锁CountDownLatch,实现主线程等待子线程任务完成后,再继续执行。的主要内容,如果未能解决你的问题,请参考以下文章