gpt4 book ai didi

java - 生产者-消费者。消费者等待所有生产者完成,毒丸

转载 作者:行者123 更新时间:2023-12-02 10:46:26 25 4
gpt4 key购买 nike

我有两个生产者和一个消费者:

public class Main {

public static void main(String[] args) throws InterruptedException {
final BlockingQueue<Integer> integersQueue = new ArrayBlockingQueue<>(20);


final Thread producer = new Thread(() -> {
for (int i = 0; i < 10; i++) {
try {
integersQueue.put(i);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});


final Thread thread = new Thread(() -> {
while (integersQueue.size() > 0) { //Wait while all producers work
try {
System.out.println("GET: " + integersQueue.take());
} catch (InterruptedException e) {
e.printStackTrace();
}
}
});


Thread thread1 = new Thread(producer);
Thread thread2 = new Thread(producer);
thread1.start();
thread2.start();

Thread.sleep(5000);

thread.start();
}
}

如果所有生产者都完成了,我正在尝试找到一种方法来阻止消费者。有多个生产者,但只有一个消费者。我需要一些毒丸,但我如何指定不同生产商的毒丸?我发现了这个:https://docs.oracle.com/javase/7/docs/api/java/util/concurrent/CountDownLatch.html但我不明白如何应用它?

最佳答案

必须有人知道存在多少生产者。

如果消费者知道,那么每个生产者在完成后都会发送一个毒丸,并且消费者对毒丸进行计数,当计数等于生产者数量时结束。

如果生产者知道,则使用AtomicInteger进行计数,最后一个生产者发送毒丸

如果只有main知道,即它是“ Controller ”,那么它需要等待所有生产者线程结束,使用join(),然后 main 发送毒丸

关于java - 生产者-消费者。消费者等待所有生产者完成,毒丸,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52525656/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com