2016-08-18 10 views
0

Проблема: Я хотел знать, когда RunTimeException выбрасывается в методе запуска потока, будет ли локализован поток этого потока? Ответ на этот вопрос лежит в том, что я спрашиваю ниже. Таким образом, если сказано, что если поток затухает (когда выбрано исключение), то поток локального моментального снимка get очищается или если поток не умирает, что происходит с потоком локального в этом случае. Нужно ли нам программно обрабатывать это? Сценарий: При большой нагрузке запрос пришел, и обработка прошла слишком долго и до того, как был создан ответ, асинхронный контекст отключен. Что происходит в этом сценарии? Что происходит с потоком, обрабатывающим запрос?Когда резьба умирает в ThreadPoolExecutor

Подробнее ... Я занимаюсь изучением того, как WorkPackExecutors работают внутри. Мне любопытно узнать, что происходит, когда RunTimeException вызывается в методе запуска потока. Убит ли он, и ThreadPoolExecutor заканчивает создание нового потока? Или JVM каким-то образом не позволяет этому потоку умереть, чтобы он мог повторно использовать в пуле . Я думаю, что нить умирает, и так это моментальный снимок ThreadLocal. Я хотел получить представление о том, как ThreadPoolExecutor обрабатывает исключения и как жизненный цикл определенного потока вращается вокруг этого. Спасибо за помощь!

+1

Почему вы заботитесь о таких деталях реализации? Беспокойство об интерфейсе, а не о реализации. Если вам действительно все равно, вам нужно вникнуть в код самостоятельно. StackOverflow предназначен для выяснения проблем, которые возникают у вас. Нарушение реализации каждого модуля в JDK из-за любопытства и не из-за проблем приводит к беспорядку. Это сайт, чтобы * получить помощь с проблемами, которые приводят к неожиданным или необъяснимым результатам *. –

+0

* «Я занимаюсь исследованием того, как WorkPackExecutors работают внутри». * - поэтому я предполагаю, что вы прочитали исходный код, который поставляется с JDK. С какой частью источника у вас возникли трудности? – the8472

+0

Это в исходном коде метода runWorker. –

ответ

0

Спасибо всем! Я получил свой ответ.

Нить умирает при выбросе исключения. Только поймать здесь, если мы ссылаемся на идентификатор потока в потоке локальный, который может вызвать утечку потока, если он не очищен должным образом.

Идентификатор темы может быть повторно использован согласно java-документам. В моем случае я помещал некоторые вещи в поток локальных ссылок на thread id (Thread.currentThread.getId). Лучший способ очистить это - переопределить afterExecute (java.lang.Runnable, java.lang.Throwable) и очистить вещи там.

От ява документы:

public long getId() 
    Returns the identifier of this Thread. The thread ID is a positive long number generated when this thread was created. The thread ID is unique and remains unchanged during its lifetime. When a thread is terminated, this thread ID may be reused. 

 Смежные вопросы

  • Нет связанных вопросов^_^