线程池服务器正常关闭

时间:2015-10-21 11:54:06

标签: java multithreading shutdown httpserver

我有一个用线程池实现的简单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。

1 个答案:

答案 0 :(得分:0)

这是一段太小的代码。

但是第一眼我没有看到主循环中任何关闭值的检查。其次,变量应该在之后设置,并且可能在监听线程上加入是值得的。在run方法中,我假设您正确处理异步关闭引发的异常。