java线程池的任务处理策略

首先,java线程池的一个很是重要的类,就是ThreadPoolExecutor类java

新建一个线程池,代码为数组

ThreadPoolExecutor executor = new ThreadPoolExecutor(...);函数

构造函数的参数说一下spa

  • int corePoolSize   线程池规定线程数(不超载的状况下)
  • int maximumPoolSize  线程池最大线程数 (已经超载了,最大能力)
  • long keepAliveTimes  线程没事干时最长存活时间
  • int TimeUnit 就是上面这个参数keepAliveTimes  的单位(年、月、天、小时、分钟、秒、毫秒、微秒)
  • BlockingQueue bockingqueue  阻塞任务队列(超载状况下排队等待的任务数组)

最关键的参数就是这么几个,最基本的任务分配策略也是基于这几个参数。下面是任务分配策略线程

一、线程池初始默认线程数为0,当有任务来临时,建立新线程执行任务队列

二、当来的任务数大于线程池规定线程数(corePoolSize )时,剩下多余的任务到 阻塞任务队列(bockingqueue )中等待it

三、当阻塞任务队列也满了的时候,也就是排队也没地儿排队了的时候,线程池会新建线程来执行任务线程池

四、当线程池的线程数达到最大线程数(maximumPoolSize )时,再来任务也接不了了,会按照拒绝任务策略来处理剩下的事情。构造函数

 

keepAliveTimes  这个参数:当线程池中的线程数大于规定线程数(corePoolSize )时,并且又没啥任务,这个时候,多余的线程在 keepAliveTimes  时间后就会消亡,线程池线程数量小于 规定线程数(corePoolSize )queue

 

最后再说线程池的两个方法,shutdown() 和 shutdownNow()

shutdown():执行这个方法后,线程池再也不接受新的任务,当执行完手里的任务(包括阻塞队列里的任务)后,线程池关闭【这个就至关于要离职了,也要处理好手里的事情

shutdownNow():执行这个方法后,线程池再也不接受新的任务,而且会尝试中断手里的任务,而后线程池关闭【这个就是要离职的时候,立刻什么都不干了,拍屁股走人

 

若是您以为这篇文章帮到您,请您顺手点个赞,若是有什么错误之处,也请您必定不吝赐教,咱们共同进步!

相关文章
相关标签/搜索