2015-05-08 3 views
0

У моей программы, похоже, есть проблема с потоками, не заканчивающимися, и я пытаюсь выяснить, почему.Как рисовать класс текущей нити

Я использую несколько разных классов резьбы и не знаю, какой из них (или, может быть, все) не заканчивается. Я пытался получить текущие потоки и бросить их, чтобы узнать их класс, но он не работает.

Один из классов резьбы:

public class Thread_Searcher extends Thread { 

    private HttpURLConnection connection; 
    int RelationValue = 0; 

    Thread_Searcher getThread_Searcher() { 
    return this; 
    } 

    public void TimePast() { 
    if (connection != null) { 
     connection.disconnect(); 
    } 
    } 
} 

Пытаясь выяснить, какой класс они принадлежат:

Set<Thread> threadSet = ScannerThread.getAllStackTraces().keySet(); 
Thread[] threadArray = threadSet.toArray(new Thread[threadSet.size()]); 
for (int x = 0; x < threadArray.length; x++) { 
try { 
    System.out.println(this.toString() + " SearchURL " + x); 
    System.out.println(this.toString() + " " + threadArray[x].isAlive() + " " + threadArray[x].toString()); 
    try { 
    Thread_Searcher test = (Thread_Searcher) threadArray[x]; 
    System.out.println(this.toString() + " SearchURL " + x + "Thread_Searcher"); 
    } catch (Exception e) { 
    System.err.println(this.toString() + " SearchURL Thread_Searcher " + e.getMessage()); 
    //CastErrors(e); 
    } 
    try { 
    Thread_LinkScanner test = (Thread_LinkScanner) threadArray[x]; 
    System.out.println(this.toString() + " SearchURL " + x + "Thread_LinkScanner"); 
    System.out.println(this.toString() + " " + x + " " + test.Status); 
    } catch (Exception e) { 
    System.err.println(this.toString() + " SearchURL Thread_LinkScanner " + e.getMessage()); 
    //CastErrors(e); 
    } 
    try { 
    Thread_PhraseSearcher test = (Thread_PhraseSearcher) threadArray[x]; 
    System.out.println(this.toString() + " SearchURL " + x + "Thread_PhraseSearcher"); 
    } catch (Exception e) { 
    System.err.println(this.toString() + " SearchURL Thread_PhraseSearcher " + e.getMessage()); 
    //CastErrors(e); 
    } 
    try { 
    Thread_URLFinder test = (Thread_URLFinder) threadArray[x]; 
    System.out.println(this.toString() + " SearchURL " + x + "Thread_URLFinder"); 
    } catch (Exception e) { 
    System.err.println(this.toString() + " SearchURL Thread_URLFinder " + e.getMessage()); 
    //CastErrors(e); 
    } 
} catch (Exception e) { 
    CastErrors(e); 
} 
} 

Приведенный выше код дает мне ниже вывод:

[email protected] SearchURL 0 
[email protected] true Thread[Attach Listener,5,system] 
[email protected] SearchURL 1 
[email protected] true Thread[Thread-23,5,main] 
[email protected] SearchURL 2 
[email protected] true Thread[Thread-4,5,main] 
[email protected] SearchURL 3 
[email protected] true Thread[Finalizer,8,system] 
[email protected] SearchURL 4 
[email protected] true Thread[Thread-19,5,main] 
[email protected] SearchURL 5 
[email protected] true Thread[TimerQueue,5,system] 
[email protected] SearchURL 6 
[email protected] true Thread[Thread-8,5,main] 
[email protected] SearchURL 7 
[email protected] true Thread[Thread-17,5,main] 
[email protected] SearchURL 8 
[email protected] true Thread[DestroyJavaVM,5,main] 
[email protected] SearchURL 9 
[email protected] true Thread[Keep-Alive-Timer,8,system] 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
Cont[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL Thread_Searcher java.lang.ref.Finalizer$FinalizerThread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.ref.Finalizer$FinalizerThread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.ref.Finalizer$FinalizerThread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.ref.Finalizer$FinalizerThread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 10 
[email protected] true Thread[Signal Dispatcher,9,system] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
Control.[email protected] SearchURL 11 
[email protected] true Thread[AWT-EventQueue-0,6,main] 
[email protected] SearchURL Thread_Searcher java.awt.EventDispatchThread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.awt.EventDispatchThread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.awt.EventDispatchThread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.awt.EventDispatchThread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 12 
[email protected] true Thread[AWT-Windows,6,system] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 13 
[email protected] true Thread[Thread-12,5,main] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 14 
[email protected] true Thread[Thread-6,5,main] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 15 
[email protected] true Thread[AWT-Shutdown,5,system] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 16 
[email protected] true Thread[Java2D Disposer,10,system] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 17 
[email protected] true Thread[Thread-10,5,main] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 18 
[email protected] true Thread[Thread-2,5,main] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 19 
[email protected] true Thread[Thread-21,5,main] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 20 
[email protected] true Thread[Thread-14,5,main] 
[email protected] SearchURL Thread_Searcher java.lang.Thread cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.Thread cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.Thread cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.Thread cannot be cast to Threads.Thread_URLFinder 
[email protected] SearchURL 21 
[email protected] true Thread[Reference Handler,10,system] 
[email protected] SearchURL Thread_Searcher java.lang.ref.Reference$ReferenceHandler cannot be cast to Threads.Thread_Searcher 
[email protected] SearchURL Thread_LinkScanner java.lang.ref.Reference$ReferenceHandler cannot be cast to Threads.Thread_LinkScanner 
[email protected] SearchURL Thread_PhraseSearcher java.lang.ref.Reference$ReferenceHandler cannot be cast to Threads.Thread_PhraseSearcher 
[email protected] SearchURL Thread_URLFinder java.lang.ref.Reference$ReferenceHandler cannot be cast to Threads.Thread_URLFinder 

So , как я могу узнать класс работающих потоков?

+2

Что вы подразумеваете под этим? Темы не имеют классов. Нитки выполняют код, который может быть в любом классе. – Kayaman

+0

Теоретически ваш метод * должен * работать, хотя он не хорошо написан. Но по какой-то причине большинство потоков имеют класс 'Thread', а не ваши собственные классы, что говорит о том, что, возможно, вы не начинаете их правильно. Можете ли вы добавить код, который запускает темы на ваш вопрос? – RealSkeptic

+0

Непосредственно: 'threadArray [i] .getClass()' –

ответ

1

Вы хотите использовать values от вашего getAllStackTraces результата, а не keys. Вы можете сканировать кадры стека каждого потока и распечатывать, какое место в этом коде выполняется в данный момент этим потоком. Что-то вроде этого, может быть:

for(Map.Entry<Thread,StackTraceElement[]> entry: ScannerThread.getAllStackTraces().entries()) { 
    System.out.println("\n***\n" + entry.getKey().getName()) 
    for(StackTraceElement e: entry.getKey().getValue()) 
     System.out.println("\t" + e); 
} 

Также обратите внимание, что, если у вас есть доступ к системе, в которой ваша программа работает, вы можете отправить его -3 сигнал (SIGQUIT) (если он находится в терминале, нажмите Ctl-\), чтобы он сбрасывал аналогичный (но лучше) вывод на свой stderr.

0

Когда вы получаете все трассировки стека с Thread.getAllStackTraces(), вы получаете трассировки стека каждого из потоков. Это означает, что у вас есть стек, включая getClassName и даже номер строки в этом классе. Из этого вы должны быть в состоянии определить, что вы хотите знать.

Я предлагаю вам записывать стеки следов потоков, которые занимают слишком много времени, однако, если вы ожидаете HTTP-запрос, вы можете обнаружить, что слишком много времени, чтобы получить ответ. например сервер занимает слишком много времени или занимает много времени для загрузки или загрузки.

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