Java线程池阻塞队列及阻塞队列线程任务塞满后阻绝策略的详细介绍

简要介绍

我们知道线程池里面的线程是用来执行一个一个的任务,一个线程一次执行一个任务,执行完后再执行待执行的任务--不包含异常情况如阻塞,被打断等。

      假如出现这样一个情况:线程池有2个核心线程,最大4个线程,这时线程池被要求执行10个任务。此时4个线程将其中4个执行,还有6个要存储,存哪?-----阻塞队列!这个时候6个任务就要存到阻塞队列中去。假如此时阻塞队列满了(容量设置为5),还有1个任务咋处理?直接丢弃?抛异常?----这些叫阻塞策略

本文主要介绍不同阻塞队列的优缺点阻塞策略的几种情况

阻塞队列

队列,用来存储数据的一种结构

阻塞队列特点:

1)线程安全:阻塞队列是线程安全的,多个线程可以并发访问它而不会发生冲突。

2)当队列为空时,消费者会被阻塞等待直到队列中有元素可供消费;当队列已满时,生产者会被阻塞等待直到队列有空闲位置可供添加元素。

1、Queue接口

Java8 中的Queue接口,是泛型接口,表明你存储的数据类型。

2、BlockingQueue接口

Java8 中的BlockingQueue接口。继承Queue接口,也是泛型接口。

3、BlockingQueue的实现类---具体阻塞队列实现

ArrayBlockingQueue:由数组组成的有界阻塞队列  数组实现,默认大小
LinkedBlockingQueue:由链表组成的有界阻塞队列
LinkedTransferQueue:由链表组成的无界队列
PriorityBlockingQueue:优先级排序的无界阻塞队列
DelayQueue:优先级排序的无界阻塞队列
SynchronousQueue:不存储元素的阻塞队列
LinkedBlockingDeque:由链表组成的双端阻塞队列
                        
原文链接:https://blog.csdn.net/Jiangtagong/article/details/121855261

阻塞策略

多余线程任务如何处理?

(1) CallerRunsPolicy
由提交任务的主线程自己完成,如果完成不了,无法执行后面的任务


(2) AbortPolicy
丢弃任务并抛出异常。这是默认的拒绝策略


(3) DiscardPolicy
丢弃任务,但是不抛出异常


(4) DiscardOldestPolicy
丢弃队列最前面的任务,重新提交给拒绝的任务

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值