Attente de la sortie du thread en Java : un dilemme de synchronisation
Dans une application Java multithread, la coordination de l'exécution de plusieurs threads est cruciale pour garantir l’intégrité des données et la réactivité des applications. Lorsqu’un thread s’appuie sur la sortie d’un autre, des mécanismes de synchronisation entrent en jeu. Un de ces scénarios est décrit dans la question suivante :
Question :
Comment faire attendre un thread Java (ci-après dénommé « thread d'application ») jusqu'à ce qu'un autre thread (le "thread db") ait terminé une opération et soit prêt à fournir une sortie ? Le thread de base de données doit rester actif pendant toute la durée de vie de l'application et les deux threads doivent s'exécuter simultanément. Bloquer le thread de l'application jusqu'à ce que le thread de base de données soit prêt est une solution acceptable.
Réponse :
La clé pour résoudre ce problème de synchronisation réside dans l'utilisation d'un CountDownLatch. CountDownLatch est une construction de synchronisation qui permet à plusieurs threads d'attendre qu'un nombre spécifique soit atteint avant de continuer. Dans ce cas :
// Create a CountDownLatch with a counter of 1 CountDownLatch latch = new CountDownLatch(1);
Dans le thread de l'application où l'attente est requise :
// The app thread waits for the db thread to complete latch.await();
Dans le thread db, une fois l'opération terminée et la sortie prête :
// The db thread signals the app thread to proceed latch.countDown();
Ce mécanisme garantit que le thread d'application ne continuera pas tant que le thread de base de données n'aura pas terminé son opération. Le thread de l'application attendra que le nombre dans CountDownLatch atteigne zéro, permettant aux deux threads de s'exécuter simultanément une fois que le thread de base de données est prêt. Cette approche fournit une solution propre et efficace pour la synchronisation des threads, préservant à la fois l'exécution des threads et l'intégrité des données.
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!