1. 需求:主线程需要等待其他三个子线程执行完毕后,才能继续执行
2. 运行结果:
3. java代码:
package com.example.demo.thread;
import java.util.concurrent.CountDownLatch;
/**
* @Description
* @author 大都督
* @date 2019年5月1日
*/
public class CountDownLatchTest {
public static void main(String[] args) throws InterruptedException {
System.out.println("等待子线程执行完毕...");
CountDownLatch countDownLatch = new CountDownLatch(3);
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("子线程," + Thread.currentThread().getName()
+ "开始执行...");
countDownLatch.countDown();// 每次减去1
System.out.println("子线程," + Thread.currentThread().getName()
+ "结束执行...");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("子线程," + Thread.currentThread().getName()
+ "开始执行...");
countDownLatch.countDown();
System.out.println("子线程," + Thread.currentThread().getName()
+ "结束执行...");
}
}).start();
new Thread(new Runnable() {
@Override
public void run() {
System.out.println("子线程," + Thread.currentThread().getName()
+ "开始执行...");
countDownLatch.countDown();
System.out.println("子线程," + Thread.currentThread().getName()
+ "结束执行...");
}
}).start();
// 调用当前方法主线程阻塞 countDown结果为0, 阻塞变为运行状态
countDownLatch.await();
System.out.println("三个子线程执行完毕....");
System.out.println("继续主线程执行..");
}
}