使用如下两个方法:
思路:
(如果直接在主线程里shundown()方法后面打印结束了肯定是不行的,会直接打印而且线程还在执行)
1.先执行一次shutdown()方法把所有的线程按顺序关闭,并执行未完成的线程,之后关闭
2.在主线程里循环去判断所有任务是否完成(设置一个延迟,这样不会太耗资源,当然延迟设的越小肯定出现结果越准确啊),完成则打印完成了,之后break
实现代码:
public class Test {
public static void main(String args[]) throws InterruptedException {
ExecutorService exe = Executors.newFixedThreadPool(50);
for (int i = 1; i <= 5; i++) {
exe.execute(new SubThread(i));
}
exe.shutdown();
while (true) {
if (exe.isTerminated()) {
System.out.println("结束了!");
break;
}
Thread.sleep(200);
}
}
}
public class SubThread extends Thread{
private final int i;
public SubThread(int i){
this.i = i;
}
@Override
public void run(){
System.out.println(i);
}
}
执行结果:
3
1
4
5
2
结束了!
子线程无法控制输出,所以是乱序