6

JFrame といくつかの JButton を持つ単純な Java アプリケーションを作成しました。JVMTI を使用して Java アプリケーションを検査しようとすると、明示的なスレッドを作成していないにもかかわらず、多数のスレッドが生成されていることがわかりました。

次のスレッドを見つけることができました。

  • DestroyJavaVM
  • AWT-EventQueue-0
  • AWT-シャットダウン
  • AWT-XAWT- デーモンスレッド
  • Java2D Disposer - デーモンスレッド
  • Thread-0 - デーモン スレッド [JVMTI エージェントによって作成される]
  • シグナルディスパッチャー - デーモンスレッド
  • ファイナライズ - デーモン スレッド
  • 参照ハンドラ - デーモン スレッド

それらのほとんどは Runnable 状態でした。誰かがこれらのスレッドの機能を教えてもらえますか?

4

2 に答える 2

10

これらのスレッドは、グラフィカル アプリケーションに必要なウィジェット、表示、イベント ループ、およびその他の配管を管理するために、基礎となるライブラリによって使用されます。

通常、GUI アプリケーションには多くの可動部分があり、これらの部分を管理するためのコードを明示的に記述する必要がないことに気付いた場合 (たとえば、画面の更新、ボタンの描画、マウスの動きの処理)。これらの部分を管理し、できるだけ簡単にアプリケーション ロジックに集中できるようにするバックグラウンド スレッドのセットです。

これらのスレッドは、使用するライブラリ (AWT、Swing など) によって生成され、通常、終了時に自分自身 (およびそれらが管理するリソース) をクリーンアップします。

于 2010-02-10T18:03:58.913 に答える
2

私はあなたに1つ言うことができます、そして3つを推測することができます...

  • AWT-EventQueue-0

これは GUI/Awt/Swing スレッドです。GUI への書き込みはすべて、このスレッドで実行する必要があります。別のスレッドが GUI に書き込みを行っている可能性があるポイントがあると思われる場合は、競合が発生していると思われるポイントに移動し、現在のスレッドの名前が「AWT-EventQueue-0」と一致することをアサートします。 .

すべてのコンポーネントで正しいスレッドの使用法を主張するライブラリの「デバッグ」バージョンを Sun がリリースしてくれればよかったのにと思います。そうすれば、多くの頭痛の種が解消され、Java が GUI をクラッシュさせる非常に悪い REP を持つことから救われたはずです。このスレッドについてはわかりません。

これらはおそらくすべて、スレッド化されたガベージ コレクターに関連しています。

  • Java2D Disposer - デーモンスレッド
  • ファイナライズ - デーモン スレッド
  • 参照ハンドラ - デーモン スレッド
于 2010-02-10T18:29:23.263 に答える