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