Java: если присоединение к потокам не работает: прервать или продолжить? - PullRequest
4 голосов
/ 23 февраля 2012

что рекомендуется делать, если присоединение к потокам не работает?

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

рекомендуется ли разрывать (что происходит с другими потоками, которые еще не присоединены?) Или вам следует хотя быпопытаться присоединиться к остальным темам и затем продолжить?

Спасибо за советы!

==> Заключение : Вы должны попробовать снова присоединиться к определенной темеили вы должны прервать этот конкретный поток 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 ();?

спасибо!: -)

1 Ответ

2 голосов
/ 23 февраля 2012

Вы получаете InterruptedException, потому что какой-то другой поток прервал это, соединение, поток, а не потому, что join не "работал".Цитируется из документации API :

InterruptedException - если другой поток прервал текущий поток.Прерванное состояние текущего потока очищается при возникновении этого исключения.


Я бы посоветовал вам снова присоединиться к потоку , пример:

for (List t : threads) {
    while (true) {
        try {
            t.join();
            break;
        } catch (InterruptedException e) {
            Thread.currentThread().interrupt();
            // ... and ignore the interrupt
        }
    }
}
...