我有一个用线程池实现的简单http服务器。我想优雅地关闭服务器。我提到了帖子Best Way to Gracefully Shutdown a Java Command Line Program 这是基本代码:
public static void main(String[] args) {
ThreadPoolServer threadserver = new ThreadPoolServer(9000);
new Thread(threadserver).start();
threadserver.attachShutDownHook();
while (true) {
try {
Thread.sleep(20 * 10000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
public synchronized void stopthread(){
this.shutdown = true;
try {
this.serverSocket.close();
} catch (IOException e) {
throw new RuntimeException("Error closing server", e);
}
}
public synchronized void attachShutDownHook() {
Runtime.getRuntime().addShutdownHook(new Thread() {
public void run() {
stopthread();
}
});
}
但它似乎并没有阻止正确的方式,任何想法? THX。
答案 0 :(得分:0)
这是一段太小的代码。
但是第一眼我没有看到主循环中任何关闭值的检查。其次,变量应该在之后设置,并且可能在监听线程上加入是值得的。在run方法中,我假设您正确处理异步关闭引发的异常。