线程池工作队列饱和策略

Posted THISISPAN

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了线程池工作队列饱和策略相关的知识,希望对你有一定的参考价值。

线程池工作队列饱和策略

Java线程池会将提交的任务先置于工作队列中,在从工作队列中获取(SynchronousQueue直接由生产者提交给工作线程)。

那么工作队列就有两种实现策略:无界队列和有界队列。

无界队列不存在饱和的问题,但是其问题是当请求持续高负载的话,任务会无脑的加入工作队列,那么很可能导致内存等资源溢出或者耗尽。

而有界队列不会带来高负载导致的内存耗尽的问题,但是有引发工作队列已满情况下,新提交的任务如何管理的难题,这就是线程池工作队列饱和策略要解决的问题。

无界队列不存在饱和的问题,但是其问题是当请求持续高负载的话,任务会无脑的加入工作队列,那么很可能导致内存等资源溢出或者耗尽。

而有界队列不会带来高负载导致的内存耗尽的问题,但是有引发工作队列已满情况下,新提交的任务如何管理的难题,这就是线程池工作队列饱和策略要解决的问题。

饱和策略分为:Abort 策略, CallerRuns 策略,Discard策略,DiscardOlds策略。

 

当工作队列满了,不同策略的处理方式为:

1.Abort策略:默认策略,新任务提交时直接抛出未检查的异常RejectedExecutionException,该异常可由调用者捕获。

当工作队列满了,不同策略的处理方式为:

1.Abort策略:默认策略,新任务提交时直接抛出未检查的异常RejectedExecutionException,该异常可由调用者捕获。

程序抛出了RejectedExecutionException

程序抛出了RejectedExecutionException

以上是关于线程池工作队列饱和策略的主要内容,如果未能解决你的问题,请参考以下文章

一文读懂线程池的工作原理(故事白话文)

一文读懂线程池的工作原理(故事白话文)

关于线程池的工作队列类型

面试官:有多少种线程池拒绝策略阻塞队列?

面试官问:线程池是如何工作的?我给他讲了个白话故事!

Java线程池的拒绝策略