BlockingQueue

另一个Queue,它支持在检索元素时等待队列变为非空,以及在存储元素时等待队列中的空间变为可用的操作。

BlockingQueue方法有四种形式,有不同的处理操作的方式,这些操作不能立即被满足,但可能在将来的某个时候被满足:

  • 第一个 抛出一个异常,

  • 第二个 返回一个特殊值(根据操作的不同,可以是null或false)

  • 第三个 无限期地阻塞当前线程,直到操作成功

  • 第四个 在放弃之前只阻塞给定的最大时间限制。这些方法总结如下表:

BlockingQueueTest

import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.TimeUnit;class BlockingQueueTest {public static void main(String[] args) throws InterruptedException {//队列的大小ArrayBlockingQueue arrayBlockingQueue = new ArrayBlockingQueue<>(3);System.out.println(arrayBlockingQueue.add("a"));System.out.println(arrayBlockingQueue.add("b"));System.out.println(arrayBlockingQueue.add("c"));try {//java.lang.IllegalStateException: Queue fullSystem.out.println(arrayBlockingQueue.add("d"));} catch (Exception e) {e.printStackTrace();}System.out.println("----------------------");System.out.println(arrayBlockingQueue.remove());System.out.println(arrayBlockingQueue.remove());System.out.println(arrayBlockingQueue.remove());try {//java.util.NoSuchElementExceptionSystem.out.println(arrayBlockingQueue.remove());} catch (Exception e) {//抛出异常e.printStackTrace();}TimeUnit.SECONDS.sleep(1);System.out.println("==============第一阶段测试完毕==============");arrayBlockingQueue = new ArrayBlockingQueue(3);System.out.println(arrayBlockingQueue.offer("a"));System.out.println(arrayBlockingQueue.offer("b"));System.out.println(arrayBlockingQueue.offer("c"));//offer 不抛出异常System.out.println(arrayBlockingQueue.offer("d"));System.out.println(arrayBlockingQueue.poll());System.out.println(arrayBlockingQueue.poll());System.out.println(arrayBlockingQueue.poll());//null 不抛出异常System.out.println(arrayBlockingQueue.poll());TimeUnit.SECONDS.sleep(1);System.out.println("==============第二阶段测试完毕==============");arrayBlockingQueue = new ArrayBlockingQueue(3);arrayBlockingQueue.put("a");arrayBlockingQueue.put("b");arrayBlockingQueue.put("c");//队列没有位置就会阻塞arrayBlockingQueue.put("c");System.out.println(arrayBlockingQueue.take());System.out.println(arrayBlockingQueue.take());System.out.println(arrayBlockingQueue.take());}
}

运行结果

true
true

true

a
b
c
java.lang.IllegalStateException: Queue full
at java.util.AbstractQueue.add(AbstractQueue.java:98)
at java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:312)
at online.wenmeng.cloudfile.CyclicBarrierTests.main(CloudFileApplicationTests.java:17)
java.util.NoSuchElementException
at java.util.AbstractQueue.remove(AbstractQueue.java:117)
at online.wenmeng.cloudfile.CyclicBarrierTests.main(CloudFileApplicationTests.java:27)
第一阶段测试完毕
true
true
true
false
a
b
c
null
第二阶段测试完毕

[第三阶段阻塞,导致没有输出,也不会运行完成]

SynchronousQueueTest

import java.util.concurrent.SynchronousQueue;
import java.util.concurrent.TimeUnit;class SynchronousQueueTest {public static void main(String[] args) throws InterruptedException {SynchronousQueue<String> synchronousQueue = new SynchronousQueue<>(); //同步队列//写线程new Thread(() -> {try {System.out.println(Thread.currentThread().getName() + "put 1");synchronousQueue.put("1");System.out.println(Thread.currentThread().getName() + "put 2");synchronousQueue.put("2");System.out.println(Thread.currentThread().getName() + "put 3");synchronousQueue.put("3");} catch (InterruptedException e) {e.printStackTrace();}}, "T1").start();//读线程new Thread(() -> {try {TimeUnit.SECONDS.sleep(3);System.out.println(Thread.currentThread().getName() + "=>" + synchronousQueue.take());TimeUnit.SECONDS.sleep(3);System.out.println(Thread.currentThread().getName() + "=>" + synchronousQueue.take());TimeUnit.SECONDS.sleep(3);System.out.println(Thread.currentThread().getName() + "=>" + synchronousQueue.take());} catch (InterruptedException e) {e.printStackTrace();} finally {}}, "T2").start();}
}

运行结果

T1put 1
T2=>1
T1put 2
T2=>2
T1put 3
T2=>3

BlockingQueue使用详解以及测试代码相关推荐

  1. Java 线程池详解及实例代码

    转载自  Java 线程池详解及实例代码 这篇文章主要介绍了Java 线程池的相关资料,并符实例代码,帮助大家学习参考,需要的朋友可以参考下 线程池的技术背景 在面向对象编程中,创建和销毁对象是很费时 ...

  2. 【OpenCV实战】OpenCV实现人脸检测详解(含代码)

    OpenCV中有许多可以进行人脸.人眼检测的特征文件,今天我们利用OpenCV中自带的特征文件haarcascade_frontalface_default.xml来进行人脸检测. [OpenCV实战 ...

  3. 【数据分析与挖掘实战】金融风控之贷款违约预测详解2(有代码和数据集)

    本文接着上一篇博客,如果您未阅读上篇博客,请点击[数据分析与挖掘实战]金融风控之贷款违约预测详解1(有代码和数据集) 七.建模和调参 7.1模型相关原理介绍 由于相关算法原理篇幅较长,本文推荐了一些博 ...

  4. 2022年全国大学生数学建模竞赛E题目-小批量物料生产安排详解+思路+Python代码时序预测模型(三)

    目录 前言 一.六种物料挑选 二.周数处理 三.时序预测模型 模型预测结果 建模的部分后续将会写出,想要了解更多的欢迎加博主微信,免费获取更多细化思路+模型! 点关注,防走丢,如有纰漏之处,请留言指教 ...

  5. 计算机组织与结构poc,CPU漏洞原理详解以及POC代码分享

    原标题:CPU漏洞原理详解以及POC代码分享 首先,这个漏洞已经公布近一周时间了,看到各大媒体.公众号到处在宣传,本打算不再发布类似信息,但是发现很多媒体的报道达到了一个目的--几乎所有的CPU都有漏 ...

  6. ADMM,ISTA,FISTA算法步骤详解,MATLAB代码,求解LASSO优化问题

    ADMM,ISTA,FISTA算法步骤详解,MATLAB代码,求解LASSO优化问题 原创文章!转载需注明来源:©️ Sylvan Ding's Blog ❤️ 实验目的 了解 ADMM, ISTA, ...

  7. python随机数程序源码_Python 实现随机数详解及实例代码

    Python3实现随机数 random是用于生成随机数的,我们可以利用它随机生成数字或者选择字符串. random.seed(x)改变随机数生成器的种子seed. 一般不必特别去设定seed,Pyth ...

  8. java super实例_java Super 用法详解及实例代码

    java Super 用法详解及实例代码 发布于 2021-1-8| 复制链接 摘记: java  Super 用法详解 1)有人写了个很好的初始化属性的构造函数,而你仅仅想要在其中添加另一些自己新建 ...

  9. JavaScript 身份证号有效验证详解及实例代码

    这篇文章主要介绍了JavaScript 身份证号有效验证详解及实例代码的相关资料,需要的朋友可以参考下 JavaScript验证身份证号 1 2 3 4 5 6 7 8 9 10 11 12 13 1 ...

  10. 希尔排序基础java代码_java 算法之希尔排序详解及实现代码

    摘要:这篇Java开发技术栏目下的"java 算法之希尔排序详解及实现代码",介绍的技术点是"希尔排序详解.实现代码.希尔排序.Java.实现.代码",希望对大 ...

最新文章

  1. 手把手教你架构3d游戏引擎pdf_一个在游戏行业摸爬滚打了十几年的人,为何我对这本书情有独钟...
  2. 奇异值分解SVD和偏最小二乘奇异值分解PLSSVD
  3. 2018新年快乐 !(附幸运读者名单)
  4. git在项目中的实际运用
  5. 011 吃药call功能分析和代码编写
  6. C语言多维数组做函数参数技术推演
  7. Redis数据类型--列表类型
  8. java虚拟机之虚拟机类加载机制
  9. 【计算机网络】局域网原理与技术(局域网概述、以太网技术、高速以太网、虚拟局域网、无线局域网)
  10. [SQL Native Client] 命名管道提供程序:无法打开与 Sql Server 的连接[2]
  11. Golang 25 个保留关键字
  12. 牛B装备 XSS 漏洞利用工具[使用教程]
  13. python中url是什么意思_Python中url标签使用详解
  14. 红米k20pro短接9008_拆解红米Redmi K20Pro,内部结果一目了然
  15. 学phyton第二天
  16. eclipse安装及使用
  17. 迎接互联网的明天--玩转3D Web
  18. POJ3159 Candies(差分约束)
  19. django-学习路程之案例(一)
  20. iOS开发学无止境 - Cell 里的视图控制器

热门文章

  1. 谷歌推出一款72个量子比特的通用量子计算机
  2. bzoj1051 [HAOI2006]受欢迎的牛
  3. js常用几种类方法实现
  4. 基于visual Studio2013解决面试题之0707最小元素
  5. 是时候了,我们需要前端架构师
  6. 游戏筑基开发之环形数组(C语言)
  7. BGP中的联盟原理和实验(华为设备)
  8. Hybrid 接口应用
  9. IS-IS详解(二十)——IS-IS 多拓扑
  10. Sublime Text3搭建HTML环境