package com.zhongmingjun.demo_2;
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.TimeUnit;
/**
* 使用CountDownLatch让主线程等待子线程执行完毕(阻塞主线程,等待子线程执行完毕后才能返回主线程往下执行)
* @author zhongmingjun
*
*/
public class CountDownLatchDemo_1 {
public static void main(String[] args) throws InterruptedException {
int count=10;这个参数和task里面的计数循环的count要一致
CountDownLatch countDownLatch=new CountDownLatch(count);
Thread th=new Thread(new MyTask_1(countDownLatch,count));
th.start();
//countDownLatch.await(5,TimeUnit.SECONDS);//设置等待超时
countDownLatch.await();
System.out.println("main thread run");
}
}
class MyTask_1 implements Runnable{
private CountDownLatch countDownLatch;
private int count;
public MyTask_1(CountDownLatch countDownLatch,int count) {
this.countDownLatch=countDownLatch;
this.count=count;
}
@Override
public void run() {
int i=0;
while(i++<count){
System.out.println("MyTask_1 run "+i);
if((countDownLatch.getCount()-1)==0){
System.out.println("task execute finished");
}
countDownLatch.countDown();如果当前计数为零,假设下面还有执行体,都不会等待执行完毕,立即返回
//System.out.println("other execute");
}
}
}
CountDownLatch入门教程1
最新推荐文章于 2024-07-22 14:15:06 发布