1

たとえば、Java アプリケーションを実行していて、RESTful Web サービス呼び出しを (Java Jersey 経由で) 提供したとします。まず、HTTP RESTful リクエスト (またはサーブレット リクエスト) のすべての呼び出しがメイン スレッドとは異なるスレッドで実行されるというのは正しいですか? もしそうなら、アプリを強制終了するための RESTful 呼び出しを提供した場合、メイン スレッド (main() メソッドによって開始されたスレッド) に到達してアプリを強制終了し、その後プログラムを停止するにはどうすればよいでしょうか?

注: 私がこれを尋ねている理由は、メイン スレッド (およびプログラム) を適切にシャットダウンする必要があるからです。

4

3 に答える 3

1

Restful サービスは、シャットダウン リクエストを他のリクエストと同じように処理する必要があります。

たとえば、アプリがオンライン ストアの場合、processOrderまたはのような呼び出しが発生する可能性がありますgetInventory。これらの呼び出しは、アプリ内の多くのものにアクセスできますよね? という名前の新しい呼び出しを行うだけshutdownです。この呼び出しは、将来の呼び出しへのゲートを閉じ、既存の呼び出しが終了するのを待ち、インメモリ情報を DB に保存し、その他の安全なシャットダウン手順を実行します。

それは本当にただの別の呼び出しです。呼び出しから「メイン メソッドを停止する」ことについてはあまり心配しません。技術的な動作ではなく、論理的な動作の観点から考えてください。

探しているジャージーに表示されますclient.destroy();

于 2012-08-30T15:07:33.157 に答える
0

Jersey サービスは、

com.sun.net.httpserver.HttpServer` 

...呼び出して作成したもの

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

HttpServer インスタンスを取得できると仮定すると、メソッドを呼び出してサービスをシャットダウンできますstop(int)。リクエスト ハンドラの 1 つからこれを実行できない理由はありません。

于 2012-08-30T15:45:57.563 に答える
0

次のコマンドで Java VM を終了できます。VMが停止しているため、すべてのスレッドもVMによって終了する必要があります...

System.exit(0);

使用方法の詳細については、ドキュメントを確認してください。

于 2012-08-30T15:06:56.493 に答える