当前位置: 首页 > 面试题库 >

动态线程池

凌钊
2023-03-14
问题内容

我有一个运行时间很长的过程,可以监听事件并进行一些激烈的处理。

目前,我通常Executors.newFixedThreadPool(x)用于限制并发运行的作业数量,但是根据一天中的时间以及其他各种因素,我希望能够动态地增加或减少并发线程的数量。

如果我减少了并发线程的数量,那么我希望当前正在运行的作业能够很好地完成。

是否有Java库可以让我控制并动态增加或减少线程池中运行的并发线程数?(该类必须实现ExecutorService)。

我必须自己实施吗?


问题答案:

看看下面的ThreadPoolExecutor中的API

public void setCorePoolSize(int corePoolSize)

设置核心线程数。这将覆盖构造函数中设置的任何值。

如果新值小于当前值,则多余的现有线程将在下次空闲时终止。

如果更大,将在需要时启动新线程以执行任何排队的任务。

初始化:

ExecutorService service = Executors.newFixedThreadPool(5);

根据需要,使用以下API 调整线程池大小

((ThreadPoolExecutor)service).setCorePoolSize(newLimit);//newLimit is new size of the pool

重要的提示:

如果队列已满,并且线程数的新值大于或等于之前定义的maxPoolSize,则Task将被拒绝。

因此,请设置maxPoolSize和的值corePoolSize



 类似资料:
  • 最近,我一直在尝试寻找一个用于线程并发任务的库。理想情况下,一个简单的接口,调用线程上的函数。任何时候都有n个线程,有些线程完成得比其他线程快,并且在不同的时间到达。 首先我在试Rx,这在c语言中很好。我也研究了区块和TBB,但它们都依赖于平台。对于我的原型,我需要保持平台独立性,因为我们还不知道它将在什么平台上运行,并且在做出决定时可以更改。 C 11有很多关于线程和并发的东西,我发现了很多关于

  • 我正在写一个小的多线程超文本传输协议文件下载程序,并希望能够缩小可用的线程,因为代码遇到错误 这些错误将特定于在web服务器不允许任何更多连接的情况下返回的http错误 eg.如果我设置了一个由5个线程组成的池,每个线程都试图打开自己的连接并下载文件块。服务器可能只允许2个连接,我相信会返回503个错误,我想检测到这一点并关闭一个线程,最终限制池的大小,大概只有服务器允许的2个 我能让线自动停止吗

  • 利用coreplot画数据统计折线。 [Code4App.com]

  • 问题内容: 我需要在Java(java.util.concurrent)中实现一个线程池,该线程池在空闲时处于最小数量,在作业提交到其完成速度快于完成时会增长到一个上限(但永远不会超过上限) ,并且在完成所有作业且不再提交任何作业时,缩小到下限。 您将如何实现这样的目标?我想这将是一个相当普遍的使用场景,但是显然工厂方法只能创建固定大小的池,并且当提交许多作业时池会无限增长。本类提供和参数,但它的

  • 我的应用程序中有如下工作流:可以有X个用户请求(通常同时有5-10个),他们希望在系统中搜索某些东西(每个请求在单独的线程中处理)。 每个搜索都可以并行处理(我目前正在实现)。线程/CPU使用实际上不是这里的问题,因为这些任务不需要占用CPU。数据库是瓶颈。 目前,我只为搜索机制设置了一个单独的DB连接池-最大池大小设置为10。我知道这不多,但我不能把它设置得更高。现在我试图弄清楚如何为每个搜索(

  • 我需要在Java(Java.util.concurrent)中实现一个线程池,它的线程数在空闲时处于某个最小值,当作业提交到线程池中时,线程数会增长到一个上限(但不会再增长),而当所有作业完成且不再提交作业时,线程数会收缩到下限。 您将如何实现这样的功能?我想这将是一个相当常见的使用场景,但显然是factory方法只能创建固定大小的池以及在提交多个作业时无限增长的池。类提供了和参数,但其文档似乎暗