阻塞队列 BlockingQueue的使用(二)

BlockingQueue 的核心方法:方法类型抛出异常特殊值阻塞超时

插入add(e)offer(e)put(e)offer(e,time,unit)

移除remove()poll()take()poll(time,unit)

检查element()peek()不可用不可用

方法类型描述

抛出异常(1)抛出异常当阻塞队列满时,再往队列里面add插入元素会抛IllegalStateException: Queue full

(2)当阻塞队列空时,再往队列Remove元素时候回抛出NoSuchElementException

特殊值(1)插入方法,成功返回true失败返回false

(2)移除方法,成功返回元素,队列里面没有就返回null

阻塞(1)当阻塞队列满时,生产者继续往队列里面put元素,队列会一直阻塞直到put数据or响应中断退出。

(2)当阻塞队列空时,消费者试图从队列take元素,队列会一直阻塞消费者线程直到队列可用

超时当阻塞队列满时,队列会阻塞生产者线程一定时间,超过后限时后生产者线程就会退出

BlockingQueue add方法的使用,代码如下:package com.mszl.thread;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.BlockingQueue;

/**

* 功能:阻塞队列演示

* 备注:更多资料请访问 http://www.91mszl.com

* @author bobo teacher

*/

public class BlockingQueueDemo {

public static void main(String[] args) {

BlockingQueue bq=new ArrayBlockingQueue<>(5); // 设置最大容量为5

bq.add("A");

bq.add("B");

bq.add("C");

bq.add("D");

bq.add("E");

System.out.println(bq);

bq.add("F");

}

}

执行结果:[A, B, C, D, E]

Exception in thread "main" java.lang.IllegalStateException: Queue full

at java.util.AbstractQueue.add(AbstractQueue.java:98)

at java.util.concurrent.ArrayBlockingQueue.add(ArrayBlockingQueue.java:312)

at com.mszl.thread.BlockingQueueDemo.main(BlockingQueueDemo.java:23)

备注:我们往BlockingQueue里面添加A,B,C,D,E 五个元素时,都正常,当超过五个时,报Exception in thread "main" java.lang.IllegalStateException: Queue full

BlockingQueue add方法的使用,代码如下:package com.mszl.thread;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.BlockingQueue;

/**

* 功能:阻塞队列演示

* 备注:更多资料请访问 http://www.91mszl.com

* @author bobo teacher

*/

public class BlockingQueueDemo {

public static void main(String[] args) {

BlockingQueue bq=new ArrayBlockingQueue<>(5); // 设置最大容量为5

bq.add("A");

bq.add("B");

bq.add("C");

bq.add("D");

bq.add("E");

System.out.println(bq);

bq.remove(); // 移除最前面的那一个元素(先进先出)

System.out.println(bq);

bq.remove("D");

System.out.println(bq);

}

}

执行结果:[A, B, C, D, E]

[B, C, D, E]

[B, C, E]

备注:使用remove()方法时,移除的是队列的第一个元素(即先进先出),如果使用remove(e)方法时,移除的是指定的元素。

BlockingQueue

element  方法的使用,代码如下:package com.mszl.thread;

import java.util.concurrent.ArrayBlockingQueue;

import java.util.concurrent.BlockingQueue;

/**

* 功能:阻塞队列演示

* 备注:更多资料请访问 http://www.91mszl.com

* @author bobo teacher

*/

public class BlockingQueueDemo {

public static void main(String[] args) {

BlockingQueue bq=new ArrayBlockingQueue<>(5); // 设置最大容量为5

bq.add("A");

bq.add("B");

bq.add("C");

bq.add("D");

bq.add("E");

System.out.println(bq);

bq.remove(); // 移除最前面的那一个元素(先进先出)

bq.remove(); // 移除最前面的那一个元素(先进先出)

bq.remove(); // 移除最前面的那一个元素(先进先出)

bq.remove(); // 移除最前面的那一个元素(先进先出)

// bq.remove(); // 移除最前面的那一个元素(先进先出)

System.out.println(bq.element());

}

}

执行结果:[A, B, C, D, E]

E

备注:element()的作用:1 检查队列第一个元素是谁;2 检查队列是否为空。

java 阻塞队列 BQ_阻塞队列 BlockingQueue的使用(二)相关推荐

  1. Java并发编程:阻塞队列

    2019独角兽企业重金招聘Python工程师标准>>> 本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法 ...

  2. Java线程详解(15)-阻塞队列和阻塞栈

    Java线程:新特征-阻塞队列 阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度 ...

  3. java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列

    ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部:当我们获取一个元素时,它会返回队列头 ...

  4. Java并发编程之阻塞队列

    Java并发编程之阻塞队列 目录 阻塞队列概述 为什么用?有什么好处? BlockingQueue的核心方法 SynchronousQueue的用法 用在哪里 1. 阻塞队列概述 阻塞队列,顾名思义, ...

  5. java 手写阻塞队列_Java阻塞队列的实现

    阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列 ...

  6. java 多线程阻塞队列 与 阻塞方法与和非阻塞方法

    Queue是什么 队列,是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的.无论使用哪种排序方式,队列的头都是调用remove()或poll()移 ...

  7. java多线程12:阻塞队列Queue

    本篇主要内容如下: 本篇主要内容 帮你总结好的阻塞队列: 18种Queue总结 一.Queue自我介绍 队列原理图 1.1 Queue自我介绍 hi,大家好,我的英文名叫Queue,中文名叫队列,无论 ...

  8. Java多线程-新特征-阻塞队列ArrayBlockingQueue

    阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素 ...

  9. Java基础积累:阻塞队列

    队列 目录 队列 阻塞队列 常用方法 常用队列 实现原理 阻塞队列 阻塞队列(BlockingQueue)是一个支持如下两个附加操作的队列. A.支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元 ...

最新文章

  1. Java项目:家庭财务管理系统(java+Springboot+ssm+mysql+maven)
  2. pdf转ppt怎么转换,pdf转换ppt的方法分享
  3. linux下c++實現簡單的生產者消費者隊列模式
  4. 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...
  5. 一起学习C语言:C语言循环结构(三)
  6. javascript this
  7. python输入不确定个数_将不确定数量的输入传递给一个函数的子函数
  8. Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
  9. (jQuery)插件开发模式
  10. 软件工程设计概念与体系结构设计
  11. 指纹匹配算法matlab,指纹识别算法matlab程序
  12. 如何用ps做计算机二级报名照片,等级考试照片PS教程
  13. wordpress添加Auto Highslide图片灯箱效果
  14. 苹果app退款_??充值消费退款
  15. 马科维茨模型的实例验证与思考(含Python代码)
  16. iPhone手机拍的图片为什么电脑上打不开?秒懂
  17. EXCEL表格内部换行
  18. docker开机启动失败_docker安装后启动不了 解决方法
  19. 中国石油大学《混凝土》第二阶段在线作业
  20. C语言与JAVA区别

热门文章

  1. 黄聪:wordpress教程
  2. c语言中通过指针将数值赋值到制定内存地址
  3. 让别人查看云服务器的文件夹,让别人查看云服务器的文件夹
  4. mysql sql 限制条数据类型_数据库的数据类型和约束条件
  5. 如何做WP的登录/注册功能
  6. 提示,请选择有效的文件
  7. VoltDB培训PPT一则
  8. 后端传到前端的字符串如何在pre标签中实现换行
  9. 六、传递、返回复杂类型的对象
  10. 用RT Server Customizer定制Windows 2008 R2安装光盘