嵌入式Jetty为什么要使用join

Lon*_*man 29 java multithreading jetty

从嵌入式Jetty教程中获取的示例表明以下内容:

public static void main(String[] args) throws Exception
{
   Server server = new Server(8080);
   server.setHandler(new HelloHandler());

   server.start();
   server.join();}
Run Code Online (Sandbox Code Playgroud)

为什么我需要添加该行server.join()?没有它,它工作正常.

Ale*_*exR -8

join()在服务器准备好之前处于阻塞状态。它的行为类似于Jetty 的线程池Thread.join(),并且确实调用了join()Jetty 的线程池。没有这个一切都会正常,因为码头启动得很快。但是,如果您的应用程序足够重,启动可能需要一些时间。调用join()保证之后服务器确实准备就绪。

  • `Server.join()` 等待服务器完全停止,如果没有它,问题中的示例将启动,并且 `main()` 将退出,导致 JVM 关闭。 (26认同)
  • 当答案显然是错误的时候,为什么这个答案会被投票(并被接受)?就像@JoakimErdfelt所说, join() 等待服务器(线程)停止,直到服务器完全启动。 (10认同)
  • 服务器的主生命周期完成启动后,`Server.start()` 将返回。其中包括您在调用“Server.start()”之前指定并附加到服务器的所有组件。但请注意,某些组件,例如 DeploymentManager(问题未使用)有自己的线程,不受此概括的影响。例如,在 `Server.start()` 之后和 `Server.join()` 之前询问连接器的状态是一个很好的做法 (7认同)
  • 我删除了连接,一切正常。服务器的线程池包含非守护线程,这意味着即使主程序完成,服务器也保持活动状态。那么……为什么要加入? (6认同)