如何通过RESTful Web服务调用从另一个线程(在Java中)杀死主线程?

时间:2012-08-30 15:03:10

标签: java

说,我运行了一个Java应用程序,并且我已经提供了RESTful Web服务调用(通过Java Jersey)。首先,我是否正确,每个HTTP RESTful请求(或servlet请求)的调用都在与主线程不同的线程上运行?如果是这样,如果我提供一个RESTful调用来杀死应用程序,它怎么能到达主线程(由main()方法启动的那个)来杀死它并随后停止程序?

注意:我问这个的原因是我需要正常关闭主线程(和程序)。

3 个答案:

答案 0 :(得分:1)

您的restful服务应该像其他任何请求一样处理关闭请求。

例如,如果您的应用是在线商店,则可能会调用processOrdergetInventory。这些调用可以访问您应用中的许多内容,对吗?好吧,只需拨打一个名为shutdown的新电话。此调用将关闭未来调用的大门,等待现有调用完成,将内存中的信息保存到DB以及其他安全关闭过程。

这真的只是另一个电话。我不会过于担心“停止主要方法” - 从逻辑行为而不是技术行为来考虑。

对于泽西岛来说,你正在寻找client.destroy();

答案 1 :(得分:0)

您可以使用以下命令终止Java VM。由于VM已停止,所有线程也应该被它终止...

System.exit(0);

您可以查看docs以了解有关使用它的详细信息。

答案 2 :(得分:0)

泽西岛服务是

的一个实例
com.sun.net.httpserver.HttpServer` 

...您通过调用

创建的
com.sun.jersey.api.container.httpserver.HttpServerFactory.create(...)

假设您可以获取HttpServer实例,可以通过调用stop(int)方法来关闭该服务。您没有理由不能通过其中一个请求处理程序执行此操作。