未来を中断せずに中断する方法はありますか?並行性 - 未来を中断せずに中断する
ブール(ブールmayInterruptIfRunning)このタスクの実行をキャンセルする
試みををキャンセルします。タスクが が既に完了しているか、既にキャンセルされているか、または何らかの理由で をキャンセルできなかった場合、この試行は失敗します。成功した場合、このタスクはキャンセルが呼び出されたときに開始された ではありません。このタスクは決して実行されません。 タスクが既に開始されている場合、mayInterruptIfRunningパラメータ は、このタスクを実行するスレッドが、タスクを停止するために中断された であるべきかどうかを判断します。
割り込みをキャプチャするには、割り込み例外を適切にキャッチするか、Runnable/Callableメソッド内のisInterrupted()メソッドをチェックする必要があります。
しかし、すべてのスレッドがエグゼキュータ・サービスのプールであるため、今後のインターフェース
を使用して、実行中の未来を中断する方法はありませんが、誰もthread.interruptを行うことができます()。 これは、未来がキャンセルされたとき、またはスレッドプールが終了しているときにだけ割り込みが発生すると想定されているのはなぜですか?
私はFutureインタフェースに割り込み方法がない理由を理解しようとしています。 助けを歓迎します
私はこの点が何であるかと思っています....それは興味深い、奇妙ではないにしても、質問です。 –
問題が少ないためです。 1.)割り込みはリスクであり、タスクがいつ中断できるかはわかりません.2)未来はどんなスレッドにも結びついていません。 Interrupt Futureのスレッドは、他のFuturesを壊す可能性があります)3.キャンセルメカニズムを使用すると、レースやデッドロックに関連する最も一般的な落とし穴の1つを回避できます。4.)コードがランダムに停止されないという高い保証が得られます状態。 – Rekin
"未来は非同期計算の結果を表します" - 非同期エンティティを中断することは危険です。非同期エンティティからの返信を待っていますか? –