4

スレッドへの参加がうまくいかない場合はどうすればよいですか?

        for (List t : threads) {
           try {
              t.join();
           } catch (InterruptedException e) {
              log.error("Thread " + t.getId() + " interrupted: " + e);
              // and now?
           }
         }

その場合、中断することをお勧めしますか (まだ結合されていない他のスレッドではどうなりますか?)、または少なくとも残りのスレッドに結合してから続行する必要がありますか?

アドバイスありがとう!

==>結論: 特定のスレッド t への参加を再試行するか、この特定のスレッド t を中断して続行する必要があります。

     for (List t : threads) {
        try {
          t.join();
       } catch (InterruptedException e) {    
            try {
                // try once! again:
                t.join();
            } catch (InterruptedException ex) {
                // once again exception caught, so:
                t.interrupt();
            }
         }
       }

この解決策についてどう思いますか?「t.interrupt()」を実行するのは正しいですか、それとも Thread.currentThread().interrupt(); にする必要がありますか? ?

ありがとう!:-)

4

1 に答える 1

2

InterruptedException他のスレッドがこれ、参加、スレッドを中断したために取得しますが、join「機能」しなかったためではありません。APIドキュメントから引用:

InterruptedException- 別のスレッドが現在のスレッドに割り込んだ場合。この例外がスローされると、現在のスレッドの中断ステータスがクリアされます。


スレッドに再度参加することをお勧めします。例:

for (List t : threads) {
    while (true) {
        try {
            t.join();
            break;
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            // ... and ignore the interrupt
        }
    }
}
于 2012-02-23T10:53:35.607 に答える