简介

一个阻塞队列接口定义,当队列为空时,取数据等待;当队列满时,存数据等待。
BlockingQueue定义的常用方法如下:

\ 抛出异常 特定值 阻塞 超时
Insert add(e) offer(e) put(e) offer(e, time, unit)
Remove remove() poll() take() poll(time,unit)
Examie element() peek() - -

1)add(e):把e加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则抛出异常

2)offer(e):表示如果可能的话,将e加到BlockingQueue里,即如果BlockingQueue可以容纳,则返回true,否则返回false.

3)put(e):把e加到BlockingQueue里,如果BlockQueue没有空间,则调用此方法的线程被阻断直到BlockingQueue里面有空间再继续.

4)poll(time,unit):取走BlockingQueue里排在首位的对象,若不能立即取出,则可以等time参数规定的时间,取不到时返回null

5)take():取走BlockingQueue里排在首位的对象,若BlockingQueue为空,阻断进入等待状态直到Blocking有新的对象被加入为止

其中:BlockingQueue 不接受null 元素。试图add、put 或offer 一个null 元素时,某些实现会抛出NullPointerException。null 被用作指示poll 操作失败的警戒值。

阻塞队列不接受null值元素,尝试存入null值元素会抛异常。null值用来表示poll()操作失败。
阻塞队列常用场景:生产者消费者

 class Producer implements Runnable {private final BlockingQueue queue;Producer(BlockingQueue q) { queue = q; }public void run() {try {while (true) { queue.put(produce()); }} catch (InterruptedException ex) { ... handle ...}}Object produce() { ... }}class Consumer implements Runnable {private final BlockingQueue queue;Consumer(BlockingQueue q) { queue = q; }public void run() {try {while (true) { consume(queue.take()); }} catch (InterruptedException ex) { ... handle ...}}void consume(Object x) { ... }}class Setup {void main() {BlockingQueue q = new SomeQueueImplementation();Producer p = new Producer(q);Consumer c1 = new Consumer(q);Consumer c2 = new Consumer(q);new Thread(p).start();new Thread(c1).start();new Thread(c2).start();}}

某个线程向BlockingQueue中插入一个对象的操作happen-before随后的其他线程获取或删除操作这个对象的操作

BlockingQueue接口分析相关推荐

  1. Java并发编程之——BlockingQueue(队列)

    一.什么是BlockingQueue BlockingQueue即阻塞队列,从阻塞这个词可以看出,在某些情况下对阻塞队列的访问可能会造成阻塞.被阻塞的情况主要有如下两种: 1. 当队列满了的时候进行入 ...

  2. Java中Queue和BlockingQueue的区别

    1.BlockingQueue:支持两个附加操作的 Queue,这两个操作是:检索元素时等待队列变为非空,以及存储元素时等待空间变得可用. 2.BlockingQueue 不接受 null 元素. 3 ...

  3. javax顶层接口分析

    1.Servlet接口分析 此接口是Servlet的最顶层接口,其中定义了Servlet生命周期相关的方法,所有Servlet都必须实现.此接口中的方法有以下几个: public void init( ...

  4. 阻塞队列BlockingQueue 学习

    import java.util.Random; import java.util.concurrent.BlockingQueue; import java.util.concurrent.Time ...

  5. 并发编程(九)—— Java 并发队列 BlockingQueue 实现之 LinkedBlockingQueue 源码分析...

    LinkedBlockingQueue 在看源码之前,通过查询API发现对LinkedBlockingQueue特点的简单介绍: 1.LinkedBlockingQueue是一个由链表实现的有界队列阻 ...

  6. JAVA线程池ThreadPoolExecutor与阻塞队列BlockingQueue .

    2019独角兽企业重金招聘Python工程师标准>>> 从Java5开始,Java提供了自己的线程池.每次只执行指定数量的线程,java.util.concurrent.Thread ...

  7. 建房子之前先挖地基 - Java BlockingQueue理解

    最近一直在看<Think In Java>里关于并发部分的章节,读到第二十一章有一个有趣的比喻:必须先挖房子的地基,但是接下来可以并行的铺设钢结构和构建水泥部件,而这两项任务必须在混凝土浇 ...

  8. java多线程-阻塞队列BlockingQueue

    大纲 BlockingQueue接口 ArrayBlockingQueue 一.BlockingQueue接口 public interface BlockingQueue<E> exte ...

  9. 生产者与消费者(三)---BlockingQueue

    前面阐述了实现生产者与消费者问题的两种方式:wait() / notify()方法 和 await() / signal()方法,本文继续阐述多线程的经典问题---生产者与消费者的第三种方式:Bloc ...

  10. java.util.concurrent BlockingQueue详解

    什么是阻塞队列? 阻塞队列(BlockingQueue)是一个支持两个附加操作的队列.这两个附加的操作是:在队列为空时,获取元素的线程会等待队列变为非空.当队列满时,存储元素的线程会等待队列可用.阻塞 ...

最新文章

  1. 【pytorch】pytorch-backward()的理解
  2. sftp连不上服务器 vscode_VSCODE 【SFTP】 Code:3221225477 / 扩展宿主意外终止 解决方法...
  3. 如何在更大的div内使图像中心(垂直和水平)居中[重复]
  4. linux sqlserver_SQL Server 与 MySQL存储引擎
  5. Last Theorem CodeForces - 1325F(dfs树找最大环+思维)
  6. MATLAB上的GPU加速计算——学习笔记
  7. leetcode10. 正则表达式匹配 一道没有解释的字符串dp困难题
  8. 【机器学习】总结:线性回归求解中梯度下降法与最小二乘法的比较
  9. VBoxManage: error: Failed to create the host-only
  10. python学习第29天
  11. The dialect was not set. Set the property hibernate.dialect
  12. Open3d之计算点云凸包
  13. java 注解校验_Java开发编写自定义校验注解和校验器
  14. Office版本差别引发的语法问题
  15. 【ML小结9】聚类分析--k均值聚类
  16. C语言求素数的几种方法
  17. 5 Openstack-Ussuri-Placement部署-ubuntu1804
  18. matlab imfilter与fft,imfilter与fspecial
  19. 飞猪java怎么样_2021春招面试必看:飞猪/新浪/饿了么内部Java面经手册首次发布...
  20. Docker 安装及镜像加速器配置

热门文章

  1. Username is not in the sudoers file. This incident will be reported
  2. 队列的实现(二) 链式队列的实现
  3. 清楚form表单数据的便捷jQuery之法
  4. 普及下Oracle hints语法
  5. 在浏览器上运行Qt应用 emscripten-qt
  6. 程序员的目标应该是向牛人看齐而不是当经理或者赚大钱
  7. C#中构造函数和析构函数的用法
  8. (PPT素材)扁平图标、PNG免抠图小图片
  9. VCL从RES中读取皮肤
  10. MongoDB安装配置(Windows)