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

当任务总数小于分配的线程数时的ExecutorService行为

郎思远
2023-03-14

如果我创建线程池大小为10的ExecutorService(使用newFixedThreadpool),并且最初只有5个任务正在运行,在这种情况下,ExecutorService创建10个线程,5个将是理想的,或者只创建5个线程。

共有2个答案

弘阳德
2023-03-14

在这种情况下,将在线程池中创建10个线程。然后将5个线程分配给任务。其他5个将等待新任务的出现。

除此之外,如果5个运行线程中的任何一个线程完成,它将返回到池中。

党宇定
2023-03-14

如果您使用ExecutorService.newFixedThreadpool(nThread),那么您将创建一个大小为nThread的线程池。所有的线程都会创建,没事就闲置。

ExecutorSerivce使用以下参数创建ThreadPoolExecutor的构造函数:

  • corePoolsizenThread
  • 最大池大小nThread
  • 保持AliveTime0
  • UnitTimeUnit。MILLISECONDS
  • workQueue是一个未绑定的队列LinkedBlockingQueue
    (实际绑定为:整数。MAX_VALUE,正常的程序不应该达到)

如果您不希望这样,则必须自己创建ThreadPoolExecutor

请注意,您必须使用具有上限的队列(当您正常运行软件时实际达到上限),否则不会创建新的线程-因为只有当队列已满时才会发生。

 类似资料:
  • JavaExecutorService框架允许您使用托管线程池委托要执行的多个任务,以便一次可以执行N个任务X个任务,直到完成。 我的问题是。。。如果N是一个无限大的数字,或者太大以至于最初无法分配/分配/定义,该怎么办。 如何利用Java(ExecutorService)中的线程池概念来处理比合理提交更多的任务,而不会耗尽资源。 为了回答这个问题,假设每个任务都是自包含的,不依赖于任何其他任务,

  • 我已经使用ExecutorService实现了超时任务。在下面的方法中,我正在提交超时任务,如果它在给定的时间内超时,我将取消该任务并关闭执行器。 它运行得很好,我没有任何问题。 然而,我想知道这是否是最好的代码设计。我只是想知道如果使用ExecutorService返回的未来是否会更好。submit()获取可调用函数的返回值或超时超时任务。例如 我正在使用JDK7。

  • 是否有一个实现,其行为类似具有以下特性的线程池? 始终至少有X个活动线程。 相当标准的线程池行为。你可能会认为ThreadPoolExecator可以处理这个问题,但是 如果提交了10个以上的任务,将引发异常。切换到永远不会超过两个最小线程,除非您限制像

  • 每次我们启动spring云任务时,它都会启动一个新的jvm(java.exe),所以如果启动了25个任务,那么它就会启动25个jvm。 我想知道如何同时限制所有任务(为所有部署的JAR运行)的总数? 假设我必须将一次运行的所有任务的总数限制为25个。在SCDF中有什么设置我们可以做到这一点吗? 请让我知道