shutdown和awaitTermination为接口ExecutorService定义的两个方法,一般情况配合使用来关闭线程池。
普通任务处理类:
package com.secbro.test.thread;
import java.util.concurrent.Callable;
/**
* @author zhuzhisheng
* @Description
* @date on 2016/6/1.
*/
public class Task implements Callable{
@Override
public Object call() throws Exception {
System.out.println("普通任务");
return null;
}
}
长时间任务处理类:
package com.secbro.test.thread;
import java.util.concurrent.Callable;
import java.util.concurrent.TimeUnit;
/**
* @author zhuzhisheng
* @Description
* @date on 2016/6/1.
*/
public class LongTask implements Callable{
@Override
public Object call() throws Exception {
System.out.println("长时间任务");
TimeUnit.SECONDS.sleep(5);
return null;
}
}
测试类:
package com.secbro.test.thread;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;
/**
* @author zhuzhisheng
* @Description
* @date on 2016/6/1.
*/
public class TestShutDown {
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("线程池已经关闭");
}
}
输出结果为:
普通任务
普通任务
长时间任务
普通任务
线程池没有关闭
线程池没有关闭
线程池没有关闭
线程池没有关闭
线程池已经关闭