想象一下将任务添加到scheduledthreadpoolexecutor的情况。这些任务中的每一个都将以不同的周期性间隔继续运行。
虽然所有这些任务不会同时运行,因为每个任务都以不同的间隔设置,但可能存在大量线程竞争执行的情况。
线程总数有限制吗?似乎对空闲线程的总数有限制。这个空闲线程的概念是否意味着长时间运行的任务(线程)可能会被破坏并在需要时重新创建?
答案 0 :(得分:1)
对于scheduledthreadpoolexecutor,线程池大小是否会继续增长?
没有。来自http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/ScheduledThreadPoolExecutor.html:
.... it acts as a fixed-sized pool using corePoolSize threads ...
是否对线程总数有任何限制?
是。见上文。
似乎对空闲线程的总数有限制。
我不确定是什么让你这么想的;文档中没有任何内容(或者如果你测试它的行为)意味着。
这个空闲线程的概念是否暗示长时间运行的任务(线程)可能会被破坏并在需要时重新创建?
任务!=线程;这个问题没有多大意义。任务将在其运行的整个时间内占用其线程;因此,长时间运行的任务将使线程长时间占用,从而减少在此期间可用于其他计划任务的线程数。执行程序,期间永远不会销毁和重新创建任务。执行者可能会尝试停止任务,但前提是您明确告知任务,例如通过shutdownNow()
interrupt()
所有正在运行的任务。不相关的,固定大小的池中的线程不会被销毁或重新创建,因为它是一个固定大小的池。