11

stackoverflow では、 の使用をよく見かけますThread.currentThread().isInterrupted()。while ループで実装Runnableして使用する場合は、次のようになります。

public void run() {
  while(!Thread.currentThread().isInterrupted()) { ... }
}

使用に違いはありますか(使用時にフラグがクリアされることThread.interrupted()以外)?interruptedinterrupted()

私も見Thread.currentThread().interrupted()ました。それはそれを使用する正しい方法ですか、それともThread.interrupted()十分ですか?

4

4 に答える 4

6

質問の最後の部分に答えるだけです...

私も見Thread.currentThread().interrupted()ました。それはそれを使用する正しい方法ですか、それともThread.interrupted()十分ですか?

純粋に機能的に言​​えば、それらはまったく同じことを意味します。

ただ、読みやすさに関しては、

    Thread.currentThread().interrupted()

インスタンスメソッドを呼び出しているように見えますが、そうではありません。したがって、

    Thread.interrupted()

優れている。そして確かにこれをしないでください:

    Thread someThread = ...
    someThread.interrupted()

をテストしているように見えsomeThreadますが、実際には現在のスレッドをテストしています。非常に誤解を招く!

于 2013-06-04T11:14:50.627 に答える
0

使用に違いはありますかThread.interrupted()(使用時に割り込みフラグがクリアされること以外interrupted())?

いいえ、しかしそれは非常に大きな違いです。while例のように、スレッドのrunメソッドの単一ループ内でのみ使用しているためrun、スレッドが中断したときにメソッドが終了する場合、違いはありませんが、他のシナリオでは可能性があります。たとえば、それぞれが中断されたステータスをチェックする入れ子になったループを想像してください(そして、外側のループがステータスをチェックする前に、内側のループがステータスをクリアします...)

Thread.currentThread().interrupted()vs.の違いについてはThread.interrupted()、機能的な違いはありませんが、後者の方が短いのでそちらを使用してください。

于 2013-06-04T11:12:37.353 に答える