2012-05-11 11 views
17

Sto lavorando a un'applicazione Java che presenta un problema di threading.Ricerca origine creazione di thread in un'applicazione Java

Durante l'utilizzo delle applicazioni per un certo periodo di tempo con il profiler Netbeans allegato, posso vedere diversi thread sono stati creati. La maggior parte finisce in qualche .5 seconds. Ho potuto trovare solo SwingWorkers utilizzati nell'applicazione.

Inoltre, la maggior parte dei thread visualizzati dal profiler sono normali thread e non SwingWorkers. A meno che questi thread siano stati creati da SwingWorker indirettamente, sospetto, alcune librerie utilizzate dall'applicazione li stiano creando.

Ora vorrei rimuovere questo problema. Ma non sono riuscito a trovare un modo per determinare l'origine della creazione del thread. Se è possibile per favore suggerire qualche altro profiler/strumento per mezzo del quale posso trovare la fonte (metodo ) di creazione del thread.

+0

Avete considerato afferrando una [traccia dello stack corrente ] [1] nel costruttore del tuo thread? [1]: http://stackoverflow.com/questions/1069066/get-current-stack-trace-in-java – OldCurmudgeon

+0

@OldCurmudgeon Come ho appena vedere i fili nei risultati del profiler, non lo faccio sapere quando e dove sono creati i thread. Quindi non penso di poterlo usare ora. Tuttavia, una volta che utilizzo i profiler elencati di seguito, potrei utilizzarlo in un caso localizzato, se necessario. Grazie per il collegamento – Ankit

+0

Correlati: http://stackoverflow.com/questions/9874641/tracking-java-thread-creation-and-lifetime –

risposta

9

Se si utilizza Eclipse e il suo debugger è un'opzione, si potrebbe provare la seguente:

  • Importare il codice in un progetto Java.
  • Ctrl-Maiusc + T (tipo aperto), immettere "Filo". Si apre l'editor sorgente binario per la classe Thread.
  • Selezionare tutti i costruttori di Thread nella vista Struttura, utilizzare il menu di scelta rapida "Attiva interruzione metodo". Ciò crea punti di interruzione per i costruttori.
  • Esecuzione e debug.

alternativa

si potrebbe ottenere l'Yourkit Java profiler, che è disponibile per la valutazione anche. Può mostrare i thread creati in un'applicazione, incluse le loro tracce di stack (anche dopo che il thread è finito). Non mostra dove sono stati creati i thread, ma la traccia di stack dei thread potrebbe darti qualche indizio sulle librerie coinvolte.

+1

Wow, questa è un'ottima risposta, che insegna anche come utilizzare correttamente Eclipse e quanto utile può essere. – dantuch

6

JProfiler può farlo. Il punto di vista di controllo del filo mostra l'analisi dello stack in cui è stato creato un filo - se la registrazione della CPU è stato attivo in quel momento:

enter image description here

Disclaimer: La mia azienda sviluppa JProfiler