私はRunnable
を受け付けるスケジューラを書いています。これは、同期または非同期の実行のためにキューに入れられます。RunnableにInterruptedExceptionをスローするように指示する方法はありますか?
SomeScheduler.interrupt(int taskId)
を実装して、InterruptedException()
がスレッド内からスローされるようにしたいと考えています。
これが可能ですか、これについてすべて間違っていますか?
私はRunnable
を受け付けるスケジューラを書いています。これは、同期または非同期の実行のためにキューに入れられます。RunnableにInterruptedExceptionをスローするように指示する方法はありますか?
SomeScheduler.interrupt(int taskId)
を実装して、InterruptedException()
がスレッド内からスローされるようにしたいと考えています。
これが可能ですか、これについてすべて間違っていますか?
Thread
sは中断できますが、Runnable
はrunメソッドを実装するクラスに過ぎません。
それはスレッドに属していません。実行スレッドの実行を中断したい場合は、呼び出しスレッドを中断する必要があります。
これが実行される典型的な方法は、ExecutorService
を使用することです。実行可能ファイルまたは実行可能ファイルを実行者サービスに送信すると、Future
が返され、Future#cancel
メソッドを使用して特定のタスクを中断できます。
スレッドが割り込みステータスをチェックし、InterruptedException
をスローするコード(たとえば、Thread#sleep
メソッド)をスレッドが実行していない限り、単にスレッドを中断してもInterruptedException
がスローされないことに注意してください。
私は 'sleep'メソッドと考えます – uzaif
submit()またはexecute()を使用していますか?この質問を見てください:http://stackoverflow.com/questions/3929342/choose-between-executorservices-submit-and-executorservices-execute/35424481#35424481。 Future.get()は、InterruptedExeceptionを取得し、是正措置を取るのに便利です。 –