0

外部アプリケーションを呼び出している Restful Service があります。このアプリケーションにより、サービスがハングします。そのため、ユーザーが私のサービスを呼び出すと、この外部アプリケーションが原因で 1 時間かかる場合があります。外部アプリケーションの実行には数秒しかかかりません。そうでなければ、何かが間違っています。そのため、サービスのコードを最大 30 秒間実行したいと考えています。30秒を過ぎたらサービスを停止して再開したい。

これが私が望んでいるものです:

    public static void main(String[] args){

    Thread thread = new Thread(){
        public void run(){
            System.out.println("Hello Thread");
        }
    };

    thread.start();

    //if thread is alive in 30 seconds, stop and retry

}

コードを 30 秒ごとに実行したくありません。コードの実行を停止して最初からやり直したい。

サービスは次のとおりです。

@Path("/test")
@GET
@Produces(MediaType.APPLICATION_JSON )
public Response test(@QueryParam("input") String input) {
    //call external application... if it hangs, it will take more than 30 seconds...

}
4

2 に答える 2

1

あなたはTimeoutについて話しているのですね。

このクラスで TimeoutCmd インターフェースを一般的に実装した方法は、読み取ろうとしている InputStream を閉じることです。これにより、例外が発生し、待機中のスレッドが解放されます。

また、Thread.interrupt の値を定期的にチェックする場合、Thread.interrupt を使用すると、実行時間の長いスレッドを停止するのに効果的です。

于 2015-07-10T19:48:15.993 に答える
0

http://docs.oracle.com/javase/7/docs/api/java/util/TimerTask.html

これには aTimerTaskを使用できます。

于 2015-07-10T19:47:02.473 に答える