//ExecutorService的生命周期管理方法
public interface ExecutorService extends Executor{
void shutdown();
List<Runnable> shutdownNow();
boolean isShutdown();
boolean isTerminated();
boolean awaitTermination(long timeout,TimeUnit unit) throws InterruptedException;
}
ExecutorService有三种状态,运行,关闭和终止,创建时候处于运行状态,shutDown方法执行平缓的关闭过程,不再接受新的任务,同时等待已经提交的任务执行完成,包括还未开始的任务,shutdownNow方法粗暴的关闭
ExecutorService关闭后提交的任务由拒绝执行处理器处理,会抛弃任务或者抛出RejectedExecutionException,等任务完成之后,进入终止状态
//支持关闭操作的WebServer
public class LifecycleWebServer{
private final ExecutorService exec = ...;
public void start() throws IOException{
while(!exec.isShutdown()){
try{
final Socket conn = socket.accept();
exec.execute(new Runnable(){
public void run(){
handleRequest(conn);
}
});
}catch(RejectedExecutionException e){
if(!exec.isShutdown()){
log("task submission rejected",e);
}
}
}
}
public void stop(){ exec.shutdown(); }
void handleRequest(Socket connection){
Request req = readRequest(connection);
if(isShutdownRequest(req)){
stop();
}else{
dispatchRequest(req);
}
}
}