当前位置: 首页 > 知识库问答 >
问题:

可调线程池和队列

邹德泽
2023-03-14

我正计划创建可调整队列大小的可调整线程池。我正在使用unbounded LinkedBlockingQueue和一个外部设置,该设置控制排队的消息数量。最初,my corepoolsize和maxpoolsize是相等的。现在,如果我想在运行时更新我的线程池大小,我通过一个公共设置将corepoolsize和maxpoolsize设置为不同的值。我想知道你对这种做法有什么看法。

当maxpoolsize设置为integer.max_value时,我是否可以只调整corepoolsize因为我的队列是无界的?

使用带有CallerRunsPolicy的SynchronousQueue而不是带有外部控制的LinkedBlockingQueue是否更好?

共有1个答案

刘高峯
2023-03-14

我没什么问题。您寻找SynchronousQueue的原因是什么?SynchronousQueue没有任何容量,即使是1。根据这里的文档-如何在运行时通过jmx修改ThreadPoolTaskExecutor

一种阻塞队列,其中每个插入操作都必须等待另一个线程进行相应的移除操作,反之亦然。同步队列没有任何内部容量,甚至没有一个容量。

所以在我看来,我们不应该使用它,除非我们的习惯驱使我们使用同样的东西。因此,除非我们对您的用例有一个公正的了解,否则我将无法发表评论。

 类似资料:
  • 主要内容:一、MySql中的线程,二、主要方式,三、源码流程,四、总结一、MySql中的线程 在mysql中,每一个连接上来,就会分配给一个相关的THD数据类。在前面的分析中可以看到,连接器(Connectors)连接到的直接就是连接池,在连接池的线程处理中分为三部分,即一对一(一个连接对应一个线程),多对一(多个连接对应一个线程)和线程池(多对多)。 线程池和线程可以针对不同的具体场景来处理具体的事务,这样既兼顾了效率又提高了适应性,对于新手来说,这就是设计的一个

  • 我必须在一个系统中管理计划的文件复制。文件复制是由用户安排的,我需要限制复制期间使用的系统资源数量。没有定义每次复制可能需要的时间(即,可能计划每15分钟运行一次复制,并且在下一次运行到期时,上一次运行可能仍在运行)。 我有一个调度器,它定期检查到期的文件复制,对于每个文件复制,(1)如果它没有排队也没有运行,就将它添加到阻塞队列中;(2)否则就删除它。 我还有一个线程池,等待直到队列中有复制并执

  • 问题内容: 是否有这样的Java类: 可以通过ID添加可执行任务,其中保证所有具有相同ID的任务都不会同时运行 线程数可以限制为固定数量 Map的幼稚解决方案很容易解决(1),但难以管理(2)。同样,我所知道的所有线程池类都将从单个队列中提取,这意味着不能保证(1)。 欢迎使用涉及外部库的解决方案。 问题答案: 如果找不到开箱即用的东西,那么推出自己的产品就不难了。您可以做的一件事是将每个任务包装

  • 在使用TensorFlow进行异步计算时,队列是一种强大的机制。 正如TensorFlow中的其他组件一样,队列就是TensorFlow图中的节点。这是一种有状态的节点,就像变量一样:其他节点可以修改它的内容。具体来说,其他节点可以把新元素插入到队列后端(rear),也可以把队列前端(front)的元素删除。 为了感受一下队列,让我们来看一个简单的例子。我们先创建一个“先入先出”的队列(FIFOQ

  • 主要内容:1 ScheduledThreadPoolExecutor的概述,2 ScheduledThreadPoolExecutor的重要属性,3 ScheduledFutureTask内部类,4 DelayedWorkQueue内部类,5 ScheduledThreadPoolExecutor的构造器,6 schedule一次性任务,6.1 triggerTime任务触发时间点,6.2 delayedExecute延迟/定期执行核心方法,,,,,,,此前我们学习了ThreadPoolExec

  • 问题内容: 我已经看到了线程池执行程序的实现及其所提供的拒绝执行策略。但是,我有一个自定义要求- 我想拥有一个回调机制,在该机制中,当达到队列大小限制时,我会收到通知,并说何时队列大小减少到最大允许队列大小的80%。 我觉得可以通过子类化线程池执行程序来实现,但是已经有一个实现的版本吗?我很乐意在需要时提供更多详细信息和我的工作,以便提供清晰的信息。 问题答案: 我希望有一个回调机制,当达到队列大