需求描述:主线程挂起,作为守护线程。线程池里,每当一个线程结束后,计数器减一。当线程池里所有线程都结束后,通知主线程,使得主线程可以继续。
import java.util.concurrent.CountDownLatch;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class TestCountDownLatch {
public static void main(String[] args) {
final int num = 1000;
//线程通信计数器
CountDownLatch end = new CountDownLatch(num);
//初始化任务线程池
ExecutorService exe = Executors.newFixedThreadPool(num);
for (int n=0; n<num; ++n) {
exe.execute(new MyRunable(end, n));
}
try {
end.await();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
class MyRunable implements Runnable {
private CountDownLatch end;
private int id;
public MyRunable(CountDownLatch end, int id) {
this.end = end;
this.id = id;
}
@Override
public void run() {
System.out.println();
System.out.println(String.format("Begin:id=%s;end=%s", id, end.getCount()));
end.countDown();
System.out.println(String.format("End:id=%s;end=%s", id, end.getCount()));
System.out.println();
}
}