Utilisation de sleep() pour un seul thread
En Java, wait() et sleep() sont utilisés pour gérer la synchronisation des threads. Cependant, lorsque vous essayez d'utiliser sleep() sur un seul thread tout en en exécutant d'autres, un problème peut survenir.
Problème :
Lors de l'appel de sleep() sur un thread , les deux threads semblent suspendre l'exécution pendant la durée spécifiée. Pourquoi ce comportement se produit-il ?
Réponse :
Lorsque vous travaillez avec les interfaces graphiques Swing, un thread unique distinct du thread principal et des autres est responsable de sa création. Ce fil est connu sous le nom de fil de répartition d'événements (EDT). Si sleep() est invoqué sur EDT, il arrête l'exécution jusqu'à ce que l'appel soit terminé.
Étant donné que le traitement des événements de l'interface graphique se produit sur EDT, toute opération de mise en veille sur ce thread suspend la gestion des événements, ce qui fait que l'interface utilisateur apparaît gelée jusqu'à la mise en veille. () conclut.
Solution :
Évitez d'utiliser Thread.sleep() sur EDT ou des threads où sleep() entraînerait un blocage involontaire de l'exécution. Vous pouvez également envisager les options suivantes :
Remarque :
Pour Java 1.6 ou version ultérieure, Swing Timer et Swing Worker sont les options préférées pour retarder les actions sur EDT. Pour les versions Java antérieures, TimerTask ou Thread peuvent être utilisés conjointement avec le bloc SwingUtilities/EventQueue#invokeXX pour garantir la réactivité de l'interface utilisateur.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!