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使用说明相关推荐

  1. modbus slave和modbus poll使用说明

    modbus slave和modbus poll使用说明 1.使用环境:  win7/win10  32/64位系统  Virtual Serial Port Driver 9.0 虚拟com端口工具 ...

  2. 19.并发容器之BlockingQueue

    1. BlockingQueue简介 在实际编程中,会经常使用到JDK中Collection集合框架中的各种容器类如实现List,Map,Queue接口的容器类,但是这些容器类基本上不是线程安全的,除 ...

  3. 阻塞队列(BlockingQueue)

    目录 一.队列(Queue) 1.Queue接口 2.Deque接口 3.ArrayDeque类 二.非阻塞队列(AbstractQueue) 1.优先级队列(priority queue) 2.Co ...

  4. Java阻塞队列-BlockingQueue介绍及实现原理

    阻塞队列是对普通队列的一种扩展,在普通队列功能上增加了一些额外功能. 普通队列的功能可以参照java的Queue接口 public interface Queue<E> extends C ...

  5. Java对象容器——顺序容器及常用方法

    泛型容器类 ArrayList ArrayList<String> notes = new ArrayList<String> //默认创建一个ArrayList集合 Arra ...

  6. 列表,元组,集合,字典常用方法

    列表(元组)常用方法 append(data) 追加 将参数data追加到列表末尾,不管data是个什么玩意都当做元素对待list.append(data) extend(model) 合并 将两个列 ...

  7. 什么是BlockingQueue

    前言 java.util.concurrent.BlockingQueue 接口很好的解决了多线程中如何高效安全"传输"数据的问题.通过这些高效并且线程安全的队列类,为我们快速搭建 ...

  8. java arraydeque poll,Java ArrayDeque

    Queue是什么 Queue是具有队列特性的接口 Queue具有先进先出的特点 Queue所有新元素都插入队列的末尾,移除元素都移除队列的头部 public interface Queue exten ...

  9. java面试题_阿里大厂流出的数百道 Java 经典面试题

    BAT 常问的 Java基础39道常见面试题 1.八种基本数据类型的大小,以及他们的封装类 2.引用数据类型 3.Switch能否用string做参数 4.equals与==的区别 5.自动装箱,常量 ...

最新文章

  1. 【NOIP模拟赛】藏宝图 最小生成树
  2. 移动端界面中的版式设计原理
  3. 产品经理如何专业吐槽产品?友谊小船从此不再翻
  4. Shiro学习(15)单点登录
  5. leetcode1423. 可获得的最大点数
  6. LeetCode 638. 大礼包(无限背包DP)
  7. Disqus API 用法 How to get your Disqus API keys
  8. [编写高质量代码:改善java程序的151个建议]后记
  9. (算法)从10000个数中找出最大的10个
  10. access无法 dolby_Win10专业版装不了dolby该怎么办?Win10 dolby音效驱动安装教程
  11. ASO关键词优化如何提升APP榜单排名,aso 关键词优化工具
  12. 计算机1教学,计算机一级教学大纲1
  13. execute immediate
  14. SSM实训: 2、博客中间内容(首页2)
  15. html怎么加背景图片不重复,css怎么设置背景图片不重复?
  16. 用matlab做谱分析程序,经典功率谱分析Matlab程序
  17. Java中的经典算法之冒泡排序(Bubble Sort)
  18. 远程传输大文件使用什么平台好呢?
  19. 快速实现免费的个人免签收款功能(不写一行代码)
  20. python控制已经打开的浏览器_使用python+selenium控制手工已打开的浏览器

热门文章

  1. OA实施成功率提升,流程梳理是关键
  2. 订单库存是否与库存地有关
  3. 常用的SAP系统FM
  4. SAP 动态设置 GUI STATUS 灰色不可用 或者隐藏
  5. SAP 权限对象设置及在程序中的应用
  6. 上市近一年,良品铺子的“高端化”之路走通了吗?
  7. linux php后门,Linux_一个初级的linux后门制作方法,众所周知,Linux的文件权限如: - phpStudy...
  8. 计算机专业英语在线测试9,《计算机专业英语》第9章在线测试【DOC精选】.doc
  9. list循环赋值_一步一步学Python3(小学生也适用) 第十七篇:循环语句for in循环
  10. 有小数点的补码怎么算_写给投资小白,指数基金,在哪买?怎么买?