2013-12-02 2 views
5

Предполагается, что у меня есть приложение, которое может создавать несколько потоков при необходимости для выполнения задач ... поэтому ничего особенного. Я использую Eclipse для написания и отладки приложений Java. Поток (позволяет называть его «async task») немедленно обновляется после того, как он покидает метод run() (поэтому есть ошибка, и я хочу найти причину такого поведения).Как найти, откуда была изначально запущена нить

Мой вопрос, если я приостанавливаю эту тему «async task» с помощью eclipse IDE (перспектива отладки ..), есть способ узнать, откуда этот поток был первоначально запущен (например, с помощью представления Debug или любого другого)? Потому что я хочу знать, кто порождает этот поток (без текстового поиска или чего-то подобного).

Есть ли хороший способ получить эту информацию?

ответ

5

Я бы поставил точку останова на Thread.start() и включить условие

enter image description here

Всякий раз, когда нить под названием «асинхронная задача» начинается состояние оценивается истина и нити, которая вызывает метод запуска паузы , Затем вы можете увидеть в стеке, откуда пришел вызов.

+0

проблема в том, что существует несколько вызовов .start(), потому что это большое приложение, поэтому я не хочу делать текстовый поиск для всех методов start(). – FrecherxDachs

+0

ok, или вы хотите положить эту точку разрыва в класс java.lang.Thread? Это может сделать это! – FrecherxDachs

+1

@FrecherxDachs, но точка останова будет только разорваться, если имя равно «async task». Конечно, если существует много потоков с именами async-задач, все сломается, и вы должны проанализировать все. –

0

Вы не можете проверить, является ли новый thread старт или не используя debuger так debug будет висеть всю JVM.

Вы можете указать logs и посмотреть, как работает threads.

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