版权声明:本文为博主原创文章,转载请说明出处 https://blog.csdn.net/u010002184/article/details/83348757
import java.util.concurrent.CountDownLatch;
public class CountDownlatchTest {
public static void main(String[] args) throws InterruptedException {
System.out.println("开始" + "," + Thread.currentThread().getName());
CountDownLatch countDownLatch = new CountDownLatch(5);
for (int i = 0; i < 5; i++) {
new Thread(new readNum(i, countDownLatch)).start();
}
countDownLatch.await();//await的作用就是当前线程等待latch.countDown()直到减到0
System.out.println("线程执行结束" + "," + Thread.currentThread().getName());
}
static class readNum implements Runnable {
private int id;
private CountDownLatch latch;
public readNum(int id, CountDownLatch latch) {
this.id = id;
this.latch = latch;
}
@Override
public void run() {
synchronized (this) {
System.out.println("id:" + id + "," + Thread.currentThread().getName());
latch.countDown();
System.out.println("线程组任务" + id + "," + Thread.currentThread().getName() + "结束,其他任务继续");
}
}
}
}
输出:
开始,main
id:2,Thread-2
线程组任务2,Thread-2结束,其他任务继续
id:3,Thread-3
线程组任务3,Thread-3结束,其他任务继续
id:0,Thread-0
线程组任务0,Thread-0结束,其他任务继续
id:4,Thread-4
线程组任务4,Thread-4结束,其他任务继续
id:1,Thread-1
线程组任务1,Thread-1结束,其他任务继续
线程执行结束,main