Java 当任务总数小于分配的线程数时的ExecutorService行为
如果我创建了线程池大小为10的ExecutorService(使用newFixedThreadPool),并且最初只有5个任务正在运行,那么在这种情况下,ExecutorService创建10个线程,5个线程是理想的,或者只创建5个线程。如果使用Java 当任务总数小于分配的线程数时的ExecutorService行为,java,multithreading,executorservice,executor,Java,Multithreading,Executorservice,Executor,如果我创建了线程池大小为10的ExecutorService(使用newFixedThreadPool),并且最初只有5个任务正在运行,那么在这种情况下,ExecutorService创建10个线程,5个线程是理想的,或者只创建5个线程。如果使用ExecutorService.newFixedThreadPool(nThreads)然后您将创建一个大小为nThreads的线程池。所有线程都将被创建,如果它们无事可做,则将处于空闲状态 ExecutorSerivce使用以下参数创建的构造函数:
ExecutorService.newFixedThreadPool(nThreads)
然后您将创建一个大小为nThreads
的线程池。所有线程都将被创建,如果它们无事可做,则将处于空闲状态
ExecutorSerivce使用以下参数创建的构造函数:
是corePoolSize
nThreads
是maximumPoolSize
nThreads
是keepAliveTime
0
是单位
时间单位。毫秒
是一个“未绑定”队列workQueue
(实际界限是:
,正常程序永远不会达到该界限)Integer.MAX\u值
如果您不希望这样,则必须自己创建
ThreadPoolExecutor
请注意,您必须使用具有上限的
队列
(在您正常运行软件时实际达到上限),否则不会创建新的线程
,因为只有当队列已满时才会发生这种情况。在这种情况下,将在线程池中创建10个线程。然后将5个线程分配给任务。其他5个将等待新任务的出现
除此之外,如果5个运行线程中的任何一个线程完成,它将返回到池中