/ / javaプロセス内の多数のスレッド - java、マルチスレッド、jvm

Javaプロセス内の多くのスレッド - java、マルチスレッド、jvm

単純なJava GUIアプリケーションがなぜそんなに多くのスレッドを作成するのですか?

ここに画像の説明を入力

回答:

回答№1については9

Javaは多くのことにスレッドを使います。

  • アプリケーションのメインスレッド、もちろん
  • アプリケーションが起動するスレッド(例SwingWorker)
  • Swingには、他のハウスキーピングスレッドと同様に別のEventディスパッチスレッドがあります。
  • 暗黙的に開始される可能性のあるタイマー
  • ガベージコレクションのための1つ以上のスレッド
  • 私は通常シャットダウンフックを実行するために準備された別のスレッドがあると思います
  • その他のJVM内部のもの

回答№2については4

Simple Java Swing GUIには以下のスレッドがあります。

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)

回答№3の場合は1

デバッガをアタッチすると、名前を見て自分自身を推測することができます。

しかし、スレッドはおそらく1つか2つのガベージコレクションスレッドです。 タイマー、クリーンアップなどのようないくつかのGUIバックグラウンドスレッド


回答№4の場合は1

jconsole(無料のJavaアプリjdk)を実行しているJavaプログラムに接続すると、「thread」タブが表示されます。このタブで、スレッド数を確認できます。詳細については、クリックできるスレッドのリストを参照してください。