我有一个基于 Grizzly NIO 的简单服务器。我按如下方式启动/关闭它,请注意关闭方法附近的注释:
public class MyServer {
public static void main(String[] args) {
try {
HttpServer server = GrizzlyHttpServerFactory.createHttpServer(URI.create("someURL"), resourceConfig, false);
Runtime.getRuntime().addShutdownHook(new Thread(() -> {
server.shutdownNow();
}));
server.start();
Thread.currentThread().join();
server.shutdown(); //this line is never reached
} catch (IOException | InterruptedException ex) {
//exception handling
}
}
}
当我终止服务器时,它会立即关闭,因为永远不会到达 server.shutdown() 行,而不是优雅的方式。话虽如此,我尝试实现一个关闭 Hook ,但它也没有被调用。我怀疑我的 join() 实现,但不确定。任何有助于实现正常关闭的帮助将不胜感激。
最佳答案
Thread.currentThread().join()
将永远阻塞。它正在等待自己完成,但无法完成,因为它正在等待自己完成。
关于java - 由于并发错误,服务器未正常关闭,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45523427/