問題タブ [interrupted-exception]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - Callable で割り込みビットを設定する理由
そのため、このリソース ( http://www.ibm.com/developerworks/java/library/j-jtp05236/index.html ) は、スレッドが割り込み自体を処理しない場合にスレッドに割り込みビットを設定することを提案しています。コール スタックの上位にあるコードが割り込みを認識し、必要に応じて応答できるようにします。」
別のスレッドで何かを実行するために ExecutorService を使用しているとしましょう。Callable を作成し、この Callable を ExecutorService.submit() に渡します。ExecutorService.submit() は Future を返します。Callable が中断されてから割り込みビットをリセットした場合、関連する Future は、Future.get() が呼び出されたときに InterruptedException をスローしません。したがって、メイン スレッドが生成されたスレッドにアクセスできる唯一の方法がこの Future である場合、Callable で中断されたビットを設定する目的は何でしょうか。
java - スリープ状態のスレッドで interrupt() を呼び出すとどうなりますか?
私はスレッドを持っていて、私はrun()
を呼び出しますsleep()
。このスレッドを中断するとどうなりますか?
私は次のことを明確にしたい:
- スレッドがまだ開始されていない場合、呼び出し
interrupt()
ても何も起こりませんよね? - スレッドが開始され、現在スリープ状態にある場合、スリープ中に呼び出すと;
interrupt()
がスローされます。InterruptedException
したがって、catch()
スレッドに移動して終了しますよね?
java - Thread.sleep()はメインUIスレッドをブロックします
私はこのスレッドを持っています:
そして、スレッドを開始しました。ただし、スレッドがメインUIスレッドをブロックしているため、ユーザーの操作に応答しません。
java - 静的解析による誤って処理された InterruptedExceptions の特定
InterruptedException が正しく処理されていない場合 (たとえば、findbugs やおそらく checkstyle などの静的解析を介して) を識別する方法はありますか (たとえば、スレッドを中断済みとしてマークするか、例外をスローするか、オプションで: 理由を説明するコメントを付けます。後者のオプション無視できる?)
java - なぜ InterruptedException はチェック例外なのですか?
これは、独自のスレッドを作成していたときの古い Java に関する質問です。別のスレッドによって中断されたときにThread.sleep(100)
スローするようないくつかのメソッド。InterruptedException
私が理解しているように、中断とは、別のスレッドが言っていることを意味します。
これが起こったとき、なぜ Java は私たちに対処することを望んでいるのInterruptedException
でしょうか?
プログラマーは、スレッドがいつ相互に割り込んでいるかを気にする必要さえありません。彼は作業をスレッド間で分割し、それが完了したときに通知を受けることができるはずです。では、Java が私たちに対処を求めている理由は何InteruptedException
でしょうか? 少なくともそうあるべきだRuntimeException
java - 割り込みメソッドの使用
ステップ 7 (マークしたとおり) で、メイン スレッドは thread を呼び出しますinterrupt()
がt2
、リソースのロックを取得するのを待っていたため、例外はスローされません。その後、メインスレッドはEnd Main
1000 ns 待ってから " " を出力します。つまり、メイン スレッドがタスクを完了したt2.interrupt()
後、例外がスローされるため、何が再びトリガーされるのでしょうか。
java - InterruptedException を飲み込んではいけない理由
私は非常に混乱しており、InterruptedException を飲み込んではいけない理由を理解できません。
IBMの記事によると
ブロッキング メソッドが割り込みを検出して InterruptedException をスローすると、割り込み状態がクリアされます。InterruptedException をキャッチしても再スローできない場合は、割り込みが発生したという証拠を保持して、コール スタックの上位にあるコードが割り込みを認識し、必要に応じて応答できるようにする必要があります。
また、Java Concurrency in Practice では、第 7.1.3 章: 割り込みへの対応でこれについて詳しく説明しています。そのルールは次のとおりです。
スレッドの割り込みポリシーを実装するコードのみが、割り込み要求を飲み込むことができます。汎用タスクおよびライブラリ コードは、割り込み要求を飲み込むべきではありません。
1.より高いコールスタックのコードで Thread.currentThread().interrupt(); によって設定されたステータスを利用する方法を誰でも説明できますか? スレッドが終了したときの catch ブロックで?
また、上記のルールについて説明してください。