Question

J'ai deux threads. Le thread A extrait certains éléments de la file d'attente et le thread B ajoute des éléments à la file d'attente.

Je veux que le sujet A se mette en veille lorsque la file d'attente est vide.

Lorsque le thread B ajoute un élément à la file d'attente, il doit s'assurer que le thread A fonctionne. Comment cela peut-il être fait en Java?

Était-ce utile?

La solution

Utilisez un BlockingQueue , qui est:

  

Une File d'attente qui prend également en charge les opérations qui attendent que la file d'attente devienne non vide lors de la récupération d'un élément et qui attendent que de l'espace soit disponible dans la file d'attente lors du stockage d'un élément.

Sérieusement, n'essayez pas de réinventer la roue ici.




(Si vous devez utiliser wait / notify, lisez ce tutoriel . Mais épargnez-vous s'il vous plaît!)

Autres conseils

Voici quelques détails:

import java.concurrent.Executors;
import java.concurrent.ExecutorService;
...
ExecutorService executor = Executors.newFixedThreadPool(someNumberOfThreads);
...
executor.execute(someObjectThatImplementsRunnable);
...
executor.shutdownNow();

C’est tout ce qu’il ya à faire avec les nouvelles fonctionnalités de thread de Java. Executor est un pool de threads contenant des unsNumberOfThreads. Il est alimenté par une file d'attente bloquante. Tous les fils dorment sauf s'il y a du travail à faire. Lorsque vous poussez un objet Runnable dans la file d'attente à l'aide de la méthode execute (), l'objet Runnable reste dans la file d'attente jusqu'à ce qu'un thread soit disponible pour le traiter. Ensuite, sa méthode run () est appelée. Enfin, la méthode shutdownNow () signale l’arrêt de tous les threads du pool.

C'est beaucoup plus simple maintenant qu'avant.

(Il existe de nombreuses variations à ce sujet, tels que les pools avec un nombre minimal et maximal de threads, ou les files d'attente ayant une taille maximale avant que les threads appelant execute () ne bloquent.)

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top