2016-07-22 2 views
2

完了するまでに時間がかかることがある外部メソッドを呼び出す必要があります。java - ループなしでスレッドが中断されていないかどうかをチェックするか、Thread.sleep()

void doMyStuff(){ 
    // do my stuff 
    // work is being done by doStuff thread 
    externalMethod(); // This is external and sometimes takes hours 
    // I need to check if current thread is interrupted and then return after a certain time 
} 

しかし、私が従事してスレッドを維持する余裕がないので、私は一定時間後にプロセスを終了する必要があります。私はWebsphere's WorkManager APIの助けを借りて、外部スレッドからdoStuffスレッドを中断することができます。しかし、中断されたスレッドがそれを処理しない限り、割り込み信号を送信するだけでは無駄です。

extenalMethod()が返すかどうかにかかわらず、一定時間後にdoStuffスレッドをスレッドプールに戻したいと考えています。これはどうすればできますか?

+0

あなたは可能性も、このような便利なLIB:https://google.github.io/guava/releases/snapshot/api/docs/com/google/common/util/concurrent/TimeLimiter.html – Tom

答えて

0

myThread.isInterrupted()を使用して、スレッドが中断されているかどうかを確認します。

void doMyStuffs(){ 
    //do my stuffs 
    System.out.println(myThread.isInterrupted()); 
} 
+0

書き込みこれは 'extenalMethod()'の前には無用です。もし 'externalMethod()'の後に書かれていれば、 'externalMethod()'が返さない限り呼び出されません。 – ares

+0

@Frank ** 'myThread.stop()'を使用しないでください:["このメソッドは本質的に危険です"](https://docs.oracle.com/javase/7/docs/api/java/lang /Thread.html#stop())。 –

+0

これで 'externalMethod()'の途中でチェックしたいですか?さて、チェックを 'externalMethod()'に追加する必要があります。あなたが既に中断をチェックしない限り、何もしないで 'externalMethod'を止めることはできません。 –

関連する問題