public class Task implements Callable {
@Override
public Object call() throws Exception {
System.out.println("普通任务");
return null;
}
}
public class LongTask implements Callable {
@Override
public Object call() throws Exception {
System.out.println("长时间任务");
TimeUnit.SECONDS.sleep(5);
return null;
}
}
public class TestMain {
public static void main(String[] args) throws InterruptedException {
ScheduledExecutorService service = Executors.newScheduledThreadPool(4);
service.submit(new Task());
service.submit(new Task());
service.submit(new LongTask());
service.submit(new Task());
service.shutdown(); //他不会接收新的提交任务, 他会等待已经提交未执行或正在执行的任务执行完毕后, 关闭线程池
while(!service.awaitTermination(1,TimeUnit.SECONDS)){
System.out.println("线程池没有关闭");
}
System.out.println("线程池已经关闭啦");
}
}
当使用awaitTermination时,主线程会处于一种等待的状态,等待线程池中所有的线程都运行完毕后才继续运行。
第一个参数指定的是时间,第二个参数指定的是时间单位(当前是秒)。返回值类型为boolean型。
1️⃣如果等待的时间超过指定的时间,但是线程池中的线程运行完毕,那么awaitTermination()返回true。执行分线程已结束。
2️⃣如果等待的时间超过指定的时间,但是线程池中的线程未运行完毕,那么awaitTermination()返回false。不执行分线程已结束。
3️⃣如果等待时间没有超过指定时间,等待!
可以用awaitTermination()方法来判断线程池中是否有继续运行的线程。