近段时间在看《Java并发编程实战》,第一遍每天看一章也没敲代码,并没吸收多少。看第二遍的时候压下速度,并敲代码,感觉理解深刻好多,废话止于此。
Java线程池会将提交的任务先置于工作队列中,在从工作队列中获取(SynchronousQueue直接由生产者提交给工作线程)。那么工作队列就有两种实现策略:无界队列和有界队列。无界队列不存在饱和的问题,但是其问题是当请求持续高负载的话,任务会无脑的加入工作队列,那么很可能导致内存等资源溢出或者耗尽。而有界队列不会带来高负载导致的内存耗尽的问题,但是有引发工作队列已满情况下,新提交的任务如何管理的难题,这就是线程池工作队列饱和策略要解决的问题。
饱和策略分为:Abort 策略, CallerRuns 策略,Discard策略,DiscardOlds策略。
为了更好的理解,我编写一个小的例子。

本文深入探讨了Java线程池的工作队列饱和策略,包括无界队列与有界队列的区别以及四种不同的饱和策略:Abort、CallerRuns、Discard和DiscardOldest策略。通过实例代码展示了每种策略在工作队列满时的行为,帮助读者理解这些策略如何影响任务的执行和资源管理。
最低0.47元/天 解锁文章
1362

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



