BlockingQueue常用方法add、off、put、take、poll使用说明
1.BlockingQueue的定义
首先将BlockingQueue提供的方法的含义解释如下:
import java.util.Collection;
import java.util.Queue;
import java.util.concurrent.TimeUnit;public interface BlockingQueue<E> extends Queue<E> {/*** 1.在不违反容量限制的情况下将指定元素插入队列,成功则立即返回true。* 2.如果没有空间则抛出IllegalStateException异常* 3.当使用容量受限时,通常使用offer*/boolean add(E e);/*** 1.在不违反容器限制的情况下降元素插入队列,成功则返回true* 2.如果没有可用空间则返回false* 3.当使用容器首先是,此方法比add更可取,因为add需要抛出异常*/boolean offer(E e);/*** 将指定的元素插入队列,阻塞队列直到可用*/void put(E e) throws InterruptedException;/*** 将指定的元素插入此队列,如果需要空间,则等待指定的等待时间。*/boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException;/*** 取出队列第一个元素并删除,阻塞队列直到可用。*/E take() throws InterruptedException;/*** 取出来队列第一个元素并删除,可等待指定的等待时间以使元素变为可用。*/E poll(long timeout, TimeUnit unit) throws InterruptedException;/*** 返回此队列在理想情况下可以不阻塞的接受元素数或者(Integer.MAX_VALUE)如果没有限制*/int remainingCapacity();/*** 从队列中删除指定的元素*/boolean remove(Object o);/*** 如果此队列包含指定元素则返回true*/public boolean contains(Object o);/*** 从队列中删除所有可用元素并将它们添加到指定集合中*/int drainTo(Collection<? super E> c);/*** 从队列中删除指定数量的可用元素,并将它们添加到指定集合中*/int drainTo(Collection<? super E> c, int maxElements);
}
2.测试代码如下
package com.leo.demo;import org.junit.Test;import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;/*** @ClassName: BlockingQueueTest* @Description: ${description}* @Author: leo825* @Date: 2020-06-18 21:51* @Version: 1.0*/
public class BlockingQueueTest {BlockingQueue<String> blockingQueue = new ArrayBlockingQueue<String>(3);/*** 将元素插入队列中,超出容量则抛异常*/@Testpublic void addTest() {boolean result;int queueSize = 3;for (int i = 0; i < queueSize; i++) {String valStr = String.valueOf(i);result = blockingQueue.add(valStr);if (result) {System.out.println("add添加[" + valStr + "]成功了");}}System.out.println(blockingQueue.toString());//添加容量之外的字符串String str0 = "666";result = blockingQueue.add(str0);if (result) {System.out.println("add添加[" + str0 + "]成功了");} else {System.out.println("add添加[" + str0 + "]失败了");}}/*** 将元素插入队列中,超出容量不抛异常*/@Testpublic void offerTest() {boolean result;int queueSize = 3;for (int i = 0; i < queueSize; i++) {String valStr = String.valueOf(i);result = blockingQueue.offer(valStr);if (result) {System.out.println("add添加[" + valStr + "]成功了");}}System.out.println(blockingQueue.toString());//添加容量之外的字符串String str0 = "666";result = blockingQueue.offer(str0);if (result) {System.out.println("add添加[" + str0 + "]成功了");} else {System.out.println("add添加[" + str0 + "]失败了");}}/*** 将元素插入队列中,超出容量阻塞,常用配合take来做生产者消费者模型*/@Testpublic void putTest() throws InterruptedException {int queueSize = 3;for (int i = 0; i < queueSize; i++) {String valStr = String.valueOf(i);blockingQueue.put(valStr);System.out.println("add添加[" + valStr + "]成功了");}System.out.println(blockingQueue.toString());//添加容量之外的字符串String str0 = "666";blockingQueue.put(str0);System.out.println("add添加[" + str0 + "]成功了");}/*** 获取队列的队头元素并删除,如果未获取到则阻塞队列直到获取到,常用配合put来做生产者消费者模型*/@Testpublic void takeTest() throws InterruptedException {int queueSize = 3;for (int i = 0; i < queueSize; i++) {String valStr = String.valueOf(i);blockingQueue.put(valStr);System.out.println("add添加[" + valStr + "]成功了");}System.out.print("take()之前:");System.out.println(blockingQueue.toString());//添加容量之外的字符串String str0;str0 = blockingQueue.take();System.out.println("take获取[" + str0 + "]成功了");System.out.print("take()之后:");System.out.println(blockingQueue.toString());str0 = blockingQueue.take();System.out.println("take获取[" + str0 + "]成功了");System.out.print("take()之后:");System.out.println(blockingQueue.toString());str0 = blockingQueue.take();System.out.println("take获取[" + str0 + "]成功了");System.out.print("take()之后:");System.out.println(blockingQueue.toString());//多取一个则阻塞了str0 = blockingQueue.take();System.out.println("take获取[" + str0 + "]成功了");System.out.print("take()之后:");System.out.println(blockingQueue.toString());}/*** 获取队列的队头元素并删除,如果未获取到直接返回null*/@Testpublic void poolTest() throws InterruptedException {int queueSize = 3;for (int i = 0; i < queueSize; i++) {String valStr = String.valueOf(i);blockingQueue.put(valStr);System.out.println("add添加[" + valStr + "]成功了");}System.out.print("poll()之前:");System.out.println(blockingQueue.toString());//添加容量之外的字符串String str0;str0 = blockingQueue.poll();System.out.println("poll获取[" + str0 + "]成功了");System.out.print("poll()之后:");System.out.println(blockingQueue.toString());str0 = blockingQueue.poll();System.out.println("poll获取[" + str0 + "]成功了");System.out.print("poll()之后:");System.out.println(blockingQueue.toString());str0 = blockingQueue.poll();System.out.println("poll获取[" + str0 + "]成功了");System.out.print("poll()之后:");System.out.println(blockingQueue.toString());//多取一个则阻塞了str0 = blockingQueue.poll();System.out.println("poll获取[" + str0 + "]成功了");System.out.print("take()之后:");System.out.println(blockingQueue.toString());}
}
BlockingQueue常用方法add、off、put、take、poll使用说明相关推荐
- modbus slave和modbus poll使用说明
modbus slave和modbus poll使用说明 1.使用环境: win7/win10 32/64位系统 Virtual Serial Port Driver 9.0 虚拟com端口工具 ...
- 19.并发容器之BlockingQueue
1. BlockingQueue简介 在实际编程中,会经常使用到JDK中Collection集合框架中的各种容器类如实现List,Map,Queue接口的容器类,但是这些容器类基本上不是线程安全的,除 ...
- 阻塞队列(BlockingQueue)
目录 一.队列(Queue) 1.Queue接口 2.Deque接口 3.ArrayDeque类 二.非阻塞队列(AbstractQueue) 1.优先级队列(priority queue) 2.Co ...
- Java阻塞队列-BlockingQueue介绍及实现原理
阻塞队列是对普通队列的一种扩展,在普通队列功能上增加了一些额外功能. 普通队列的功能可以参照java的Queue接口 public interface Queue<E> extends C ...
- Java对象容器——顺序容器及常用方法
泛型容器类 ArrayList ArrayList<String> notes = new ArrayList<String> //默认创建一个ArrayList集合 Arra ...
- 列表,元组,集合,字典常用方法
列表(元组)常用方法 append(data) 追加 将参数data追加到列表末尾,不管data是个什么玩意都当做元素对待list.append(data) extend(model) 合并 将两个列 ...
- 什么是BlockingQueue
前言 java.util.concurrent.BlockingQueue 接口很好的解决了多线程中如何高效安全"传输"数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建 ...
- java arraydeque poll,Java ArrayDeque
Queue是什么 Queue是具有队列特性的接口 Queue具有先进先出的特点 Queue所有新元素都插入队列的末尾,移除元素都移除队列的头部 public interface Queue exten ...
- java面试题_阿里大厂流出的数百道 Java 经典面试题
BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...
最新文章
- 【NOIP模拟赛】藏宝图 最小生成树
- 移动端界面中的版式设计原理
- 产品经理如何专业吐槽产品?友谊小船从此不再翻
- Shiro学习(15)单点登录
- leetcode1423. 可获得的最大点数
- LeetCode 638. 大礼包(无限背包DP)
- Disqus API 用法 How to get your Disqus API keys
- [编写高质量代码:改善java程序的151个建议]后记
- (算法)从10000个数中找出最大的10个
- access无法 dolby_Win10专业版装不了dolby该怎么办?Win10 dolby音效驱动安装教程
- ASO关键词优化如何提升APP榜单排名,aso 关键词优化工具
- 计算机1教学,计算机一级教学大纲1
- execute immediate
- SSM实训: 2、博客中间内容(首页2)
- html怎么加背景图片不重复,css怎么设置背景图片不重复?
- 用matlab做谱分析程序,经典功率谱分析Matlab程序
- Java中的经典算法之冒泡排序(Bubble Sort)
- 远程传输大文件使用什么平台好呢?
- 快速实现免费的个人免签收款功能(不写一行代码)
- python控制已经打开的浏览器_使用python+selenium控制手工已打开的浏览器
热门文章
- OA实施成功率提升,流程梳理是关键
- 订单库存是否与库存地有关
- 常用的SAP系统FM
- SAP 动态设置 GUI STATUS 灰色不可用 或者隐藏
- SAP 权限对象设置及在程序中的应用
- 上市近一年,良品铺子的“高端化”之路走通了吗?
- linux php后门,Linux_一个初级的linux后门制作方法,众所周知,Linux的文件权限如: - phpStudy...
- 计算机专业英语在线测试9,《计算机专业英语》第9章在线测试【DOC精选】.doc
- list循环赋值_一步一步学Python3(小学生也适用) 第十七篇:循环语句for in循环
- 有小数点的补码怎么算_写给投资小白,指数基金,在哪买?怎么买?