线程池的工作原理可以概括为以下几个方面:

线程池状态

线程池有五种状态:运行状态(RUNNING)、待关闭状态(SHUTDOWN)、停止状态(STOP)、空状态(TIDYING)和终止状态(TERMINATED)。

线程池在创建后处于空状态,接受任务后进入运行状态,执行`shutdown()`方法后进入待关闭状态,执行`shutdownNow()`方法后进入停止状态。

线程池的重要属性

`corePoolSize`:核心线程数,即线程池中始终存在的线程数,即使没有任务执行也会保持这个数量。

`maximumPoolSize`:线程池允许的最大线程数。

`keepAliveTime`:非核心线程在空闲状态下的存活时间,超过这个时间后线程会被销毁。

`workQueue`:用于存储等待执行的任务队列。

`RejectedExecutionHandler`:当任务无法被接受时的处理策略,如抛出异常或丢弃任务。

线程池的工作流程

当有新任务提交到线程池时,线程池会首先判断核心线程池中的线程是否都在执行任务。

如果核心线程空闲或者还有核心线程未被创建,则创建一个新的工作线程来执行任务。

如果核心线程都在执行任务,任务会被放入工作队列中等待执行。

如果工作队列未满,新任务会被添加到队列中。

如果工作队列已满,且线程池中的线程数未达到最大值,则创建一个新的工作线程执行任务。

如果线程池中的线程数已达到最大值,且工作队列已满,则根据拒绝策略处理新提交的任务,如抛出异常或丢弃任务。

核心线程在任务执行完毕后不会立即销毁,而是挂起等待下一个任务。

非核心线程在任务执行完毕后,如果一段时间内没有被复用,则会被销毁。

通过这种方式,线程池可以有效地管理线程的创建和销毁,减少系统资源的消耗,并提高系统的响应速度

点赞(0) 打赏

微信小程序

微信扫一扫体验

微信公众账号

微信扫一扫加关注

发表
评论
返回
顶部