Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 嵌入式码头为什么要使用连接_Java_Multithreading_Jetty - Fatal编程技术网

Java 嵌入式码头为什么要使用连接

Java 嵌入式码头为什么要使用连接,java,multithreading,jetty,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();} 为什么需要添加行server.join()?没有它,它可以正常工作。join()在服务器准备就绪之前一直处于

来自嵌入式Jetty教程的示例表明:

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

   server.start();
   server.join();}

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

join()
在服务器准备就绪之前一直处于阻塞状态。它的行为类似于
Thread.join()
,实际上调用了Jetty线程池的
join()
。没有这个,一切都正常,因为码头启动得很快。但是,如果您的应用程序足够重,那么启动可能需要一些时间。调用
join()
将在服务器的主要生命周期完成启动后返回。其中包括在调用
Server.start()
之前指定并连接到服务器的所有组件。但是请注意,有些组件,例如DeploymentManager(问题没有使用它)有它们自己的线程,这不受此泛化的约束。例如,在
Server.start()
之后和
Server.join()
之前询问连接器的状态是一种很好的做法,我是否应该注意JVM没有关闭,而是主()出口。?主出口,这很好,但是服务器仍然在后台运行,这就是我想要的。当答案显然是错误的时候,这是为什么投票(并被接受)?正如@JoakimErdfelt所说,join()等待服务器(线程)停止,直到服务器完全启动。我删除了join,一切正常。服务器的线程池包含非守护进程线程,这意味着即使主线程完成,服务器仍保持活动状态。那么…为什么要加入?