Por que um aplicativo Java GUI simples cria tantos threads?
Respostas:
9 para resposta № 1Java usa threads para muitas coisas:
- O thread principal do aplicativo, é claro
- Quaisquer threads iniciados pelo aplicativo (por exemplo, SwingWorker)
- O Swing possui um encadeamento de despacho de evento separado, além de outros encadeamentos de limpeza
- Temporizadores, alguns dos quais podem começar implicitamente
- Um ou mais encadeamentos para coleta de lixo
- Eu acho que geralmente há um thread separado preparado para executar ganchos de desligamento
- Outras coisas internas da JVM
4 para resposta № 2
Uma GUI Java Swing simples possui os seguintes segmentos:
Thread [AWT-Shutdown] (Suspended)
Object.wait(long) line: not available [native method] [local variables unavailable]
Object.wait() line: 485
AWTAutoShutdown.run() line: 265
Thread.run() line: 619
Daemon Thread [AWT-Windows] (Suspended)
WToolkit.eventLoop() line: not available [native method] [local variables unavailable]
WToolkit.run() line: 295
Thread.run() line: 619
Thread [AWT-EventQueue-0] (Suspended)
Object.wait(long) line: not available [native method] [local variables unavailable]
EventQueue(Object).wait() line: 485
EventQueue.getNextEvent() line: 479
EventDispatchThread.pumpOneEventForFilters(int) line: 236
EventDispatchThread.pumpEventsForFilter(int, Conditional, EventFilter) line: 184
EventDispatchThread.pumpEventsForHierarchy(int, Conditional, Component) line: 174
EventDispatchThread.pumpEvents(int, Conditional) line: 169
EventDispatchThread.pumpEvents(Conditional) line: 161
EventDispatchThread.run() line: 122
Thread [DestroyJavaVM] (Suspended)
1 para resposta № 3
Se você anexar um depurador, poderá ver os nomes e adivinhar a si mesmo,
mas os threads provavelmente são um ou dois threads de coleta de lixo, alguns tópicos de plano de fundo da GUI, como temporizadores, limpeza etc.
1 para resposta № 4
Além disso, se você iniciar o jconsole (aplicativo java gratuito nojdk) e conecte-se a um programa java em execução, existe uma guia "thread" que permite ver quantos threads existem, juntamente com uma lista de threads em que você pode clicar para obter mais informações.