/ / Eine Menge Threads im Java-Prozess - Java, Multithreading, Jvm

Viele Threads in Java-Prozess - Java, Multithreading, JVM

Warum erstellt eine einfache Java-GUI-Anwendung so viele Threads?

Bildbeschreibung hier eingeben

Antworten:

9 für die Antwort № 1

Java verwendet Threads für viele Dinge:

  • Natürlich der Haupt-Thread der Anwendung
  • Alle Threads, die die Anwendung startet (z. B. SwingWorker)
  • Swing hat einen separaten Event-Versand-Thread sowie einige andere Housekeeping-Threads
  • Timer, von denen einige implizit gestartet werden können
  • Ein oder mehrere Threads für die Garbage Collection
  • Ich denke, es ist in der Regel ein separater Thread vorbereitet, um Shutdown-Hooks auszuführen
  • Andere JVM-interne Dinge

4 für die Antwort № 2

Eine Simple Java Swing-Benutzeroberfläche hat folgende Threads:

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 für die Antwort № 3

Wenn Sie einen Debugger anhängen, können Sie die Namen sehen und selbst raten

aber die Threads sind wahrscheinlich ein oder zwei Müllsammel-Threads, ein paar Gui-Hintergrund-Threads wie Timer, Bereinigung usw.


1 für die Antwort № 4

Auch wenn Sie jconsole starten (kostenlose Java-App injdk) und verbinden Sie sich mit einem laufenden Java-Programm. Es gibt eine Registerkarte "Thread", auf der Sie die Anzahl der Threads sowie eine Liste der Threads sehen können, auf die Sie klicken können, um weitere Informationen anzuzeigen.