固定线程池和预定线程池之间的Java差异

Moh*_*uur 6 java concurrency executorservice threadpool

我有一个固定的线程池,可以随时运行7个并发线程(带队列),我想把它变成一个只运行7个并发作业的调度线程池,但可以排队/安排更多.

阅读文档并没有真正帮助我..

的newFixedThreadPool

public static ExecutorService newFixedThreadPool(int nThreads)

创建一个线程池,该线程池重用一组在共享无界队列中运行的固定线程.如果任何线程由于在关闭之前执行期间的故障而终止,则在需要执行后续任务时将使用新的线程.

参数:nThreads - 池中的线程数返回:新创建的线程池

的newScheduledThreadPool

public static Sc​​heduledExecutorService newScheduledThreadPool(int corePoolSize)

创建一个线程池,可以调度命令在给定的延迟后运行,或者定期执行.

参数:corePoolSize - 池中保留的线程数,即使它们处于空闲状态.返回:新创建的计划线程池

我不明白的是,corePoolSize和nThreads是一回事吗?调度线程池是否真的是固定线程池的一个子集,这意味着我可以将调度线程池用作可以对延迟任务进行排队的固定线程池?

mha*_*ler 5

是的,只是增加了调度功能,它们基本上是同一件事。ScheduledThreadPoolExecutor甚至扩展了ExecutorService(ThreadPoolExecutor)的默认实现。

nThreads和corePoolSize是要产生的线程数。对于固定的执行者,总是一样的。通过其他实现,它在min(corePoolSize)和max(maxPoolSize)之间变化。