线程池的参数
1. JAVA线程池源码
先看看源码内容,这里是 线程池的 全参构造方法
1 |
|
1.1 核心线程数(corePoolSize)
任务队列未达到队列容量时,最大可以同时运行的线程数量
1.2 最大线程数(maximumPoolSize)
任务队列中存放的任务达到队列容量的时候,当前可以同时运行的线程数量变为最大线程数。
1.3 工作队列(workQueue)
新任务来的时候会先判断当前运行的线程数量是否达到核心线程数,如果达到的话,新任务就会被存放在队列中
1.4 非核心线程存活时间(keepAliveTime)
线程池中的线程数量大于 corePoolSize 的时候,如果这时没有新的任务提交,核心线程外的线程不会立即销毁,而是会等待,直到等待的时间超过了 keepAliveTime才会被回收销毁
1.5 非核心线程存活时间单位(unit)
keepAliveTime 参数的时间单位。
1.6 线程池工厂(threadFactory)
executor 创建新线程的时候会用到。
1.7 拒绝策略(handler)
当前同时运行的线程数量达到最大线程数量,并且队列也已经被放满了任务时, 再新增的任务 会按拒绝策略 进行执行。
- ThreadPoolExecutor.AbortPolicy:抛出 RejectedExecutionException来拒绝新任务的处理
- ThreadPoolExecutor.CallerRunsPolicy:调用执行自己的线程运行任务,也就是直接在调用execute方法的线程中运行(run)被拒绝的任务,如果执行程序已关闭,则会丢弃该任务。因此这种策略会降低对于新任务提交速度,影响程序的整体性能。如果您的应用程序可以承受此延迟并且你要求任何一个任务请求都要被执行的话,你可以选择这个策略
- ThreadPoolExecutor.DiscardPolicy:不处理新任务,直接丢弃掉。
- ThreadPoolExecutor.DiscardOldestPolicy:此策略将丢弃最早的未处理的任务请求。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 ING-BLOG!
评论