Comment synchroniser les threads en Java : une solution pratique pour la communication de thread à thread
Dans la programmation Java, coordonner plusieurs threads pour une l’exécution est cruciale. Considérez un scénario dans lequel vous disposez d’un thread de logique d’application et d’un thread d’accès à la base de données qui doivent s’exécuter simultanément. Ces threads nécessitent que certaines dépendances soient remplies avant de continuer. Cet article explore une technique pour synchroniser le thread d'application, en s'assurant qu'il attend que le thread de base de données soit prêt.
Le défi : synchronisation sans blocage
Généralement, Thread. join() est utilisé pour bloquer un thread jusqu'à ce qu'un autre thread termine son exécution. Cependant, dans ce cas, les deux threads doivent continuer à s'exécuter pendant toute la durée de vie de l'application. Bloquer un fil ne suffirait pas.
La solution : CountDownLatch
La solution réside dans l'utilisation d'un CountDownLatch. Cette classe utilise un compteur qui fait office de point de rendez-vous pour les threads.
Implémentation dans le thread d'application :
Dans le thread d'application, créez un CountDownLatch avec un décompte de 1 :
CountDownLatch latch = new CountDownLatch(1);
Ensuite, demandez au thread d'application d'attendre que le thread de base de données soit prêt :
latch.await();
Cet appel bloquera le thread d'application jusqu'à ce que le thread de base de données signale qu'il est prêt .
Implémentation dans le thread de base de données :
Dans le thread de base de données, une fois le processus d'initialisation terminé, il devrait décrémenter le compteur CountDownLatch :
latch.countDown();
Cette action libérera le thread d'application de son état d'attente, permettant aux deux threads de poursuivre leurs opérations de manière transparente.
Avantages :
L'utilisation de CountDownLatch offre plusieurs avantages :
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!