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

Java 当任务总数小于分配的线程数时的ExecutorService行为,java,multithreading,executorservice,executor,Java,Multithreading,Executorservice,Executor,如果我创建了线程池大小为10的ExecutorService(使用newFixedThreadPool),并且最初只有5个任务正在运行,那么在这种情况下,ExecutorService创建10个线程,5个线程是理想的,或者只创建5个线程。如果使用ExecutorService.newFixedThreadPool(nThreads)然后您将创建一个大小为nThreads的线程池。所有线程都将被创建,如果它们无事可做,则将处于空闲状态 ExecutorSerivce使用以下参数创建的构造函数:

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

如果使用
ExecutorService.newFixedThreadPool(nThreads)
然后您将创建一个大小为
nThreads
的线程池。所有线程都将被创建,如果它们无事可做,则将处于空闲状态

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

  • corePoolSize
    nThreads
  • maximumPoolSize
    nThreads
  • keepAliveTime
    0
  • 单位
    时间单位。毫秒
  • workQueue
    是一个“未绑定”队列
    (实际界限是:
    Integer.MAX\u值
    ,正常程序永远不会达到该界限)

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


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

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

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