通过CountDownLatch来控制
import java.util.concurrent.CountDownLatch;
public class ImportThread extends Thread {
private CountDownLatch threadsSignal;
public ImportThread(CountDownLatch threadsSignal) {
this.threadsSignal = threadsSignal;
}
@Override
public void run() {
System.out.println(Thread.currentThread().getName() + "开始...");
// Do somethings
threadsSignal.countDown();// 线程结束时计数器减1
System.out.println(Thread.currentThread().getName() + "结束. 还有"
+ threadsSignal.getCount() + " 个线程");
}
}
import java.util.Iterator;
import java.util.concurrent.CountDownLatch;
public class TestThread {
public static void main(String[] args) {
int threadNum=5;
CountDownLatch threadSignal = new CountDownLatch(threadNum);//初始化countDown
for (int ii = 0; ii < threadNum; ii++) {//开threadNum个线程
Thread t = new ImportThread(threadSignal);
t.start();
}
try {
threadSignal.await();
} catch (InterruptedException e) {
e.printStackTrace();
}//等待所有子线程执行完
System.out.println(Thread.currentThread().getName() + "结束.");//打印结束标记
}
}