线程池,常见的四种线程池和区别
简述
  为了彻底了解线程池的时候,我们需要弄清楚线程池创建的⼏个参数
corepollsize : 核⼼池的⼤⼩,默认情况下,在创建线程池后,每当有新的任务来的时候,如果此时线程池中的线程数⼩于核⼼线程数,就会去创建⼀个线程执⾏(就算有空线程也不复⽤),当创建的线程数达到核⼼线程数之后,再有任务进来就会放⼊任务缓存队列中。当任务缓存队列也满了的时候,就会继续创建线程,知道达到最⼤线程数。如果达到最⼤线程数之后再有任务过来,那么就会采取拒绝服务策略。
Maximumpoolsize : 线程池中最多可以创建的线程数
keeplivetime : 线程空闲状态时,最多保持多久的时间会终⽌。默认情况下,当线程池中的线程数⼤于corepollsize 时,才会起作⽤ ,直到线程数不⼤于 corepollsize 。
workQuque: 阻塞队列,⽤来存放等待的任务
rejectedExecutionHandler :任务拒绝处理器(这个注意⼀下),有四种
java线程池创建的四种(1)abortpolicy丢弃任务,抛出异常
(2)discardpolicy拒绝执⾏,不抛异常
(3)discardoldestpolicy 丢弃任务缓存队列中最⽼的任务
(4)CallerRunsPolicy 线程池不执⾏这个任务,主线程⾃⼰执⾏。
1、new FixedThr ea dPo o l 定长线程池
⼀个有指定的线程数的线程池,有核⼼的线程,⾥⾯有固定的线程数量,响应的速度快。正规的并发线程,多⽤于服务器。固定的线程数由系统资源设置。核⼼线程是没有超时机制的,队列⼤⼩没有限制,除⾮线程池关闭了核⼼线程才会被回收。
2、new Ca c hedThr ea dPo o l 可缓冲线程池
只有⾮核⼼线程,最⼤线程数很⼤,每新来⼀个任务,当没有空余线程的时候就会重新创建⼀个线程,这边有⼀个超时机制,当空闲的线程超过60s内没有⽤到的话,就会被回收,它可以⼀定程序减少频繁创建/销毁线程,减少系统开销,适⽤于执⾏时间短并且数量多的任务场景。
3、Sc heduledThr ea dPo o l 周期线程池
创建⼀个定长线程池,⽀持定时及周期性任务执⾏,通过过schedule⽅法可以设置任务的周期执⾏
4、new SingleThr ea dExec uto r 单任务线程池
创建⼀个单线程化的线程池,它只会⽤唯⼀的⼯作线程来执⾏任务,保证所有任务按照指定顺序(FIFO, LIFO, 优先级)执⾏,每次任务到来后都会进⼊阻塞队列,然后按指定顺序执⾏。
关键源码解读
1、e x e cute⽅法

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。