常用线程池执行器
JDK自带线程池执行器(ThreadPoolExecutor)
spring封装的线程池执行器(ThreadPoolTaskExecutor)
后者其实是对前者的一个封装
JDK四个内置线程(池)
如下,不过实际一般使用自定义的线程池,视服务器情况而定。
- newFixedThreadPool:创建一个定长线程池,超出的任务会在队列中等待。
- newCachedThreadPool:创建一个可缓存线程池,空闲了可以回收,少了可以创建。最大大小为int类型最大值(Interger. MAX_VALUE,约21亿)。
- newSingleThreadExecutor:创建一个单工作线程,可以保证执行顺序。
- newScheduledThreadPool:创建一个定长线程池,支持定时及周期性任务执行。
线程池参数
- 核心线程数 corePoolSize
- 最大线程数 maximumPoolSize
- 空闲线程存活时间 keepAliveTime
- 时间单位 unit
- 任务队列 workQueue
- 拒绝策略 rejectedExecutionHandler
拒绝策略
- AbortPolicy:拒绝任务并抛出异常,会丢失数据。
- DiscardPolicy:仅拒绝任务,不抛异常,会丢失数据。
- DiscardOldestPolicy:放弃任务队列中最前面的一个未处理的任务,然后重新添加该新任务,会丢失数据。
- CallerRunsPolicy:拒绝任务,让调用的上级线程自己执行,不会丢失数据,但会让上级线程压力增大。