七大参数
- 核心线程池大小
- 线程池最大线程数
- 空闲线程存活时间
- 空闲线程存活时间的单位
- 任务队列
- 线程工厂
- 拒绝策略
线程池原理以及应用场景
- 判断线程池中的核心线程是否都在执行任务,如果不是则创建新的工作线程来执行任务,否则进入下一流程;
- 判断线程池工作队列是否已满,如果没满则将任务存储到工作队列中,满了则进入下一流程;
- 判断线程池中的线程是否都处于工作状态,如果没有,则创建新的工作线程来执行任务,否则交给饱和策略来处理任务。

线程池的作用
线程池的作用主要是为了提升系统的性能以及使用率。传统方式创建线程,如果用户量较大,那么就会产生很多创建和销毁线程的动作,这会导致服务器在创建和销毁线程上消耗的性能可能要比处理实际业务花费的时间和性能更多。线程池就是为了解决这种这种问题而出现的。
newSingleThreadExecutor:
- 定义:创建只有一个线程的线程池,线程池内线程存活时间无限制;当该线程正繁忙时,对于新任务会进入阻塞队列中(无界的阻塞队列)
- 适用:一个任务一个任务执行的场景
NewScheduledThreadPool: - 定义:创建一个固定大小的线程池,线程池内线程存活时间无限制,线程池可以支持定时及周期性任务执行,如果所有线程均处于繁忙状态,对于新任务会进入DelayedWorkQueue队列中,这是一种按照超时时间排序的队列结构
- 适用:周期性执行任务的场景
newFixedThreadPool: - 通俗:创建一个固定大小的线程池,线程池内线程存活时间无限制,当池满了就不在添加线程了;如果池中的所有线程均在繁忙状态,对于新任务会进入阻塞队列中(无界的阻塞队列)
- 适用:执行长期的任务,性能好很多
拒绝策略
当线程池的任务缓存队列已满并且线程池中的线程数目达到maximumPoolSize时,如果还有任务到来就会采取任务拒绝策略,通常有JDK内置的四种策略
- ThreadPoolExecutor.AbortPolicy:丢弃任务并抛出RejectedExecutionException异常。
- ThreadPoolExecutor.DiscardPolicy:丢弃任务,但是不抛出异常。
- ThreadPoolExecutor.DiscardOldestPolicy:丢弃队列最前面的任务,然后重新提交被拒绝的任务。
- ThreadPoolExecutor.CallerRunsPolicy:由调用线程(提交任务的线程)处理该任务
本文详细解读了Java线程池的核心线程池大小、最大线程数等七大参数,探讨了线程池的工作原理、应用场景,并介绍了新SingleThreadExecutor、NewScheduledThreadPool和newFixedThreadPool的区别,以及拒接策略的四种选择。
968

被折叠的 条评论
为什么被折叠?



