gpt4 book ai didi

java - 生产者消费者——使用Executors.newFixedThreadPool

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:28:46 26 4
gpt4 key购买 nike

我对生产者-消费者模式的理解是,它可以使用生产者和消费者之间共享的队列来实现。生产者将工作提交到共享队列,消费者检索并处理它。也可以通过生产者直接提交给消费者来实现(Producer线程直接提交给Consumer的executor服务)。

现在,我一直在研究提供线程池一些常见实现的 Executors 类。根据规范,newFixedThreadPool 方法“重用固定数量的线程,这些线程在共享的无界队列中运行”。他们在这里谈论哪个队列?

如果Producer直接提交任务给consumer,ExecutorService的内部队列是否包含Runnables列表?

或者它是中间队列,以防生产者提交到共享队列?

可能是我漏掉了重点,但有人可以澄清一下吗?

最佳答案

你是对的,ExecutorService 不仅是一个线程池,还是一个完整的生产者-消费者实现。这个内部队列实际上是一个线程安全的 Runnable 队列(准确地说是 FutureTask),其中包含您submit() 的任务。

池中的所有线程都阻塞在该队列上,等待执行任务。当您 submit() 一项任务时,只有一个线程会拾取它并运行它。当然 submit() 并不是等待池中的线程完成处理。

另一方面,如果您提交大量任务(或长时间运行的任务),您可能会导致池中的所有线程都被占用,而一些任务在队列中等待。一旦任何线程完成其任务,它将立即从队列中选择第一个线程。

关于java - 生产者消费者——使用Executors.newFixedThreadPool,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7031996/

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