由于并发不当行为,服务器未正常关闭
Server is not shutting down gracefully due to concurrency malpractice
我有一个基于 Grizzly NIO 的简单服务器。我starting/shutting把它弄下来如下,请注意关闭方法附近的注释:
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() 行,而不是以一种优雅的方式。话虽如此,我试图实现一个关闭挂钩,但它也没有被调用。我怀疑我的 join() 实现但不确定。任何帮助实现正常关机的帮助将不胜感激。
Thread.currentThread().join()
将永远阻塞。它正在等待自己完成但无法完成,因为它正在等待自己完成。
我有一个基于 Grizzly NIO 的简单服务器。我starting/shutting把它弄下来如下,请注意关闭方法附近的注释:
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() 行,而不是以一种优雅的方式。话虽如此,我试图实现一个关闭挂钩,但它也没有被调用。我怀疑我的 join() 实现但不确定。任何帮助实现正常关机的帮助将不胜感激。
Thread.currentThread().join()
将永远阻塞。它正在等待自己完成但无法完成,因为它正在等待自己完成。