Мониторинг исключений времени выполнения, выданных ThreadPoolExecutor - PullRequest
1 голос
/ 08 мая 2019

Я использую ThreadPoolExecutor, с парой сообщений, обеспечивающих потоки, подающие в него сообщения для обработки. Каждый поток проверяет глубину исполнителя перед отправкой. Если глубина превышает определенный порог, то поток будет ждать определенное время и проверять снова. Она будет отправлена ​​только тогда, когда найдет глубину ниже порога. Поэтому я не думаю, что исполнитель взорвется от слишком большого количества сообщений. Тем не менее, я все еще хотел бы знать, какие исключения мне нужно искать. Я нашел только из API "RejectedExecutionException", которые могут прийти от исполнителя:

Новые задачи, представленные в методе execute (java.lang.Runnable), будут отклонены, когда исполнитель будет закрыт, а также когда исполнитель использует конечные границы как для максимальных потоков, так и для емкости рабочей очереди, и насыщается.

Является ли RejectedExecutionException единственным исключением, которое мне нужно искать в журналах? Кто-нибудь сталкивался с ситуацией, когда исполнитель попадает в состояние неопределенности? Что происходит в этой ситуации? Мы все еще увидим RejectedExecutionException? Возможны ли другие исключения? Большое спасибо!

1 Ответ

0 голосов
/ 08 мая 2019

Опытным путем я обнаружил, что при работе с Executors вам необходимо иметь вспомогательную функцию, которая обеспечивает корневой класс Exception, чтобы вы могли правильно регистрировать его для диагностики. Это происходит потому, что некоторые исполнители генерируют исключение java.util.concurrent.TimeoutException, другие выдают исключение java.util.concurrent.ExecutionException в зависимости от реализации, поэтому я получил интерфейс ниже

UnaryOperator<Throwable> flatEx = t -> 
    t.getCause() == null ? t : 
        t.getCause().getCause() == null ? t.getCause() :
            t.getCause().getCause().getCause() == null ? t.getCause().getCause() : 
                t.getCause().getCause().getCause();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...