黑龙江交通系统网站建设,新产品推广,泉州程序员做网站网站维护,全媒体运营师证报名入口一 阻塞队列
1.1 阻塞队列介绍
阻塞队列#xff08;BlockingQueue#xff09;是一个在队列基础上又支持了两个附加操作的队列#xff1a;
put方法#xff1a;当队列装满时#xff0c;添加的线程则被阻塞#xff0c;直到队列不满#xff0c;则可用。
take方法#x…一 阻塞队列
1.1 阻塞队列介绍
阻塞队列BlockingQueue是一个在队列基础上又支持了两个附加操作的队列
put方法当队列装满时添加的线程则被阻塞直到队列不满则可用。
take方法当队列为空时消费的线程则被阻塞直到队列不空时则可用。
阻塞功能使得生产者和消费者两端的能力得以平衡当有任何一端速度过快时阻塞队列便会把过快的速度给降下来。实现阻塞最重要的两个方法是 take 方法和 put 方法。
根据容量的大小分为有界和无界两种。
总结当队列满了无法添加元素或者是队列空了无法移除元素时
1.2 阻塞的put与take方法逻辑
1.2.1 put方法
1) offer(E e)如果队列没满返回true如果队列已满返回false不阻塞
2)offer(E e, long timeout, TimeUnit unit)可以设置阻塞时间如果队列已满则进行阻塞。超过阻塞时间则返回false
3)put(E e)队列没满的时候是正常的插入如果队列已满则阻塞直至队列空出位置
put 方法
put 方法插入元素时如果队列没有满那就和普通的插入一样是正常的插入但是如果队列已满那么就无法继续插入则阻塞直到队列里有了空闲空间如果后续队列有了空闲空间比如消费者消费了一个元素那么此时队列就会解除阻塞状态并把需要添加的数据添加到队列中 抛出异常add、remove、element返回结果但不抛出异常offer、poll、peek阻塞put、take
方法抛出异常返回特定值阻塞阻塞特定时间入队add(e)offer(e)put(e)offer(e, time, unit)出队remove()poll()take()poll(time, unit)获取队首元素element()peek()不支持不支持 1.3 常见的api
BlockingQueue 接口的实现类都被放在了 juc 包中。