2017-04-04 2 views
-1

disons que nous avons deux threads avec sont connectés par un ConcurrentLinkedQueue. Ce que je veux, c'est quelque chose comme un gestionnaire sur la file d'attente pour qu'un thread sache quand l'autre file a ajouté quelque chose à la file d'attente et l'interroger. Est-ce possible?ConcurrentLinkedQueue: Comment implémenter un gestionnaire Java?

+0

Oui, c'est possible. Regardez http://stackoverflow.com/questions/435069/java-util-concurrentlinkedqueue/435941#435941 – Natalia

+0

Si vous utilisez une file d'attente de blocage, vous pouvez simplement appeler 'take'. Il reviendra quand un élément est disponible. – john16384

+0

mais je veux qu'il soit asynchrone – user3133542

Répondre

1

Normalement, un ConcurrentLinkedQueue est utilisé lorsqu'il y a au moins un producteur sur un thread et au moins un consommateur sur un thread différent.

Le consommateur traitera l'élément dès qu'il sera disponible, pour effectuer l'opération de lecture sur les blocs de la file d'attente, parfois pour une durée limitée. Selon l'application, vous pouvez avoir un seul producteur et de nombreux consommateurs, ou vice versa. Le blocage réalise exactement vos besoins (le thread consommateur sait quand un élément est inséré). Le fait que les blocs de thread consommateurs ne posent aucun problème, sauf si c'est votre processus principal ou si vous prévoyez de créer plusieurs centaines de consommateurs simultanés. Donc, Queue # take() ou Queue # poll (long timeout, unité TimeUnit) est votre ami ici, si vous l'exécutez simplement sur un thread dédié.