有的时候博客内容会有变动,首发博客是最新的,其他博客地址可能会未同步,认准
https://blog.zysicyj.top
ThreadPoolExecutor
是 Java 中 java.util.concurrent
包提供的一个强大的线程池实现。它提供了多种构造方法,但最常用的构造函数如下:
ThreadPoolExecutor(
int corePoolSize,
int maximumPoolSize,
long keepAliveTime,
TimeUnit unit,
BlockingQueue<Runnable> workQueue,
ThreadFactory threadFactory,
RejectedExecutionHandler handler
)
下面是每个参数的详细说明:
allowCoreThreadTimeOut
,否则它们不会因为闲置超时而被回收。
keepAliveTime
的时间单位 —— TimeUnit
是一个枚举,提供了时间单位,如 TimeUnit.SECONDS
。
execute
方法提交的 Runnable
任务。
ThreadFactory
可以自定义线程的名称、优先级、守护进程状态等。
ThreadPoolExecutor.AbortPolicy
是一个拒绝策略,它将抛出 RejectedExecutionException
。
线程池的工作流程大致如下:
corePoolSize
,则创建并启动一个新线程来处理任务,即使其他工作线程处于空闲状态。 corePoolSize
,则将任务添加到工作队列。 maximumPoolSize
,则创建并启动一个新线程来处理任务。 maximumPoolSize
,则根据拒绝策略处理无法执行的任务。 keepAliveTime
,如果当前运行的线程数超过 corePoolSize
,这个线程将被终止,以减少资源消耗。
shutdown()
方法时,线程池将不再接受新任务,但会继续处理工作队列中的所有剩余任务。调用 shutdownNow()
方法将尝试停止所有正在执行的任务,并停止处理工作队列中的任务。
通过合理配置这些参数,可以创建一个既能够处理动态变化的负载,又能够有效管理系统资源的线程池。
本文由 mdnice 多平台发布