2010-02-10 9 views
5

J'ai créé une application Java simple qui a un JFrame et peu de JButtons. Quand j'ai essayé d'inspecter l'application java en utilisant JVMTI, j'ai trouvé que bien que je n'ai pas créé de threads explicites, beaucoup d'entre eux ont été générés.Quels sont ces threads qui sont crées lorsqu'une application Java commence son exécution?

je pouvais trouver les fils suivants:

  • DestroyJavaVM
  • AWT-EventQueue-0
  • AWT-arrêt
  • AWT-XAWT- Daemon Discussion
  • Java2D Disposer- Daemon Discussion
  • Thread-0- Fil de démon [Créé par l'agent JVMTI]
  • Dispatcher- Signal Daemon Discussion
  • Finalize- Daemon Discussion
  • Référence Händler- Daemon Discussion

La plupart d'entre eux étaient dans un état Runnable. Quelqu'un peut-il me dire la fonction de ces fils?

Répondre

9

Ces threads sont utilisés par les bibliothèques sous-jacentes pour gérer les widgets, l'affichage, la boucle d'événements et autres éléments de plomberie nécessaires à votre application graphique. Une application GUI a généralement beaucoup de parties mobiles, et si vous avez remarqué, vous n'avez pas besoin d'écrire explicitement du code pour gérer ces parties (par exemple, mettre à jour l'écran, ou dessiner un bouton, ou gérer un mouvement de la souris). Est-ce cet ensemble de threads d'arrière-plan qui sont responsables de la gestion de ces parties, et de le rendre aussi facile que possible pour vous de vous concentrer sur votre logique d'application.

Ces threads sont engendrés par les bibliothèques que vous utilisez (par exemple, AWT, Swing, etc.) et se nettoient généralement eux-mêmes (et les ressources qu'ils gèrent) à la fin.

1

Je peux vous dire une, et devinez à trois ...

  • AWT-EventQueue-0

C'est l'interface graphique/Awt/thread Swing. Tout ce qui écrit dans la GUI doit être exécuté sur ce fil! Parfois, si je pense qu'il y a un point où un autre thread pourrait écrire dans l'interface graphique, je vais aller au point où je pense que la contention pourrait se produire et affirmer que le nom du thread actuel correspond à "AWT-EventQueue-0" . Je souhaite vraiment que Sun ait publié une version "Debug" de la bibliothèque qui affirme l'utilisation correcte du thread dans tous les composants - cela aurait sauvé beaucoup de maux de tête et sauvé Java d'avoir un REP vraiment mauvais pour les interfaces graphiques ce sont vraiment des gens qui ne comprennent pas ce sujet.

Ce sont probablement tous liés au collecteur d'ordures fileté:

  • Java2D Disposer- Daemon Discussion
  • Finalize- Daemon Discussion
  • Référence Händler- Daemon Discussion