class LifecycleWebServer {
private final ExecutorService exec = ...;
public void start() throws IOException {
ServerSocket socket = new ServerSocket(80);
while (!exec.isShutdown()) {
try {
final Socket conn = socket.accept();
exec.execute(new Runnable() {
public void run() { handleRequest(conn); }
});
} catch (RejectedExecutionException e) {
// 线程池关闭后提交任务将抛出RejectedExecutionException异常
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);
}
}
|