1

假设我有一个 Java 应用程序正在运行,并且我提供了 RESTful Web 服务调用(通过 Java Jersey)。首先,我对 HTTP RESTful 请求(或 servlet 请求)的每次调用都运行在与主线程不同的线程上是对的吗?如果是这样,如果我提供一个 RESTful 调用来终止应用程序,它如何到达主线程(由 main() 方法启动的线程)来终止它并随后停止程序?

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

4

3 回答 3

1

你的 restful 服务应该像对待任何其他请求一样对待关闭请求。

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

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

它会出现在泽西岛,你正在寻找client.destroy();.

于 2012-08-30T15:07:33.157 回答
0

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

System.exit(0);

您可以查看文档以获取有关使用它的详细信息。

于 2012-08-30T15:06:56.493 回答
0

Jersey 服务是

com.sun.net.httpserver.HttpServer` 

...您通过调用创建的

com.sun.jersey.api.container.httpserver.HttpServerFactory.create(...)

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

于 2012-08-30T15:45:57.563 回答