2017-08-05 38 views
0

我有一个基于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()行立即获取关闭服务器永远不会达到,而不是优雅的方式。正如所说,我试图实现一个关闭挂钩,但它也没有被调用。我怀疑我的join()实现,但不确定。任何帮助实现优雅的关闭将不胜感激。

回答

1

Thread.currentThread().join()将永远阻止。它正在等待自己完成,但无法完成,因为它正在等待自己完成。

+0

你会建议一个正确的机制来处理它吗? –

+0

@johndoe我不明白你为什么在那里。你主要运行,不需要加入。 –

+0

因为它是一个服务器实现,所以我使用Grizzly的API,我开始它然后想要优雅地关闭它。 –

相关问题