прерывается при присоединении к другим потокам - PullRequest
3 голосов
/ 07 июня 2011

Как мне обращаться с InterruptedException при присоединении к другим потокам, при условии, что я на самом деле не ожидаю, что меня прервут, и нет ничего разумного, что можно сделать? Просто проглотить исключение?

try
{
    t.join();
    u.join();
}
catch (InterruptedException e)
{
    // should not happen
}

Или я должен поместить каждый join в отдельный try/catch, поэтому если InterruptedExeption произойдет при присоединении t, по крайней мере u получит шанс присоединения?

try
{
    t.join();
}
catch (InterruptedException e)
{
    // should not happen
}
try
{
    u.join();
}
catch (InterruptedException e)
{
    // should not happen
}

Или я должен осторожно проглотить исключения в цикле, чтобы в конечном итоге присоединиться к обоим потокам, даже если какой-нибудь злой парень попытается прервать меня?

while (true)
{
    try
    {
        t.join();
        break;
    }
    catch (InterruptedException e)
    {
        // no way, Jose!
    }
}
while (true)
{
    try
    {
        u.join();
        break;
    }
    catch (InterruptedException e)
    {
        // no way, Jose!
    }
}

Кстати, есть ли случай, когда InterruptedExeption не делает мой код уродливым? :)

1 Ответ

2 голосов
/ 07 июня 2011

Если что-то не должно произойти, вы, вероятно, захотите узнать, произойдет ли когда-нибудь - и лучший способ сделать это очевидным - часто бросить RuntimeException некоторого описания (например, * 1004). *). Если вы не ожидаете, что вас могут прервать, это говорит о том, что система находится в состоянии, которое вы не очень-то рады поддерживать, поэтому я бы тогда не пытался продолжать - быстрое прерывание часто является лучшим вариантом здесь.

Возможно, вы захотите написать вспомогательный метод, который сделает это за вас, чтобы сделать код вызова более чистым.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...