java 阻塞队列 BQ_阻塞队列 BlockingQueue的使用(二)
原
阻塞队列 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的使用(二)相关推荐
- Java并发编程:阻塞队列
2019独角兽企业重金招聘Python工程师标准>>> 本文先讲述一下java.util.concurrent包下提供主要的几种阻塞队列,然后分析了阻塞队列和非阻塞队列的中的各个方法 ...
- Java线程详解(15)-阻塞队列和阻塞栈
Java线程:新特征-阻塞队列 阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度 ...
- java多线程 --ConcurrentLinkedQueue 非阻塞 线程安全队列
ConcurrentLinkedQueue是一个基于链接节点的无界线程安全队列,它采用先进先出的规则对节点进行排序,当我们添加一个元素的时候,它会添加到队列的尾部:当我们获取一个元素时,它会返回队列头 ...
- Java并发编程之阻塞队列
Java并发编程之阻塞队列 目录 阻塞队列概述 为什么用?有什么好处? BlockingQueue的核心方法 SynchronousQueue的用法 用在哪里 1. 阻塞队列概述 阻塞队列,顾名思义, ...
- java 手写阻塞队列_Java阻塞队列的实现
阻塞队列与普通队列的区别在于,当队列是空的时,从队列中获取元素的操作将会被阻塞,或者当队列是满时,往队列里添加元素的操作会被阻塞.试图从空的阻塞队列中获取元素的线程将会被阻塞,直到其他的线程往空的队列 ...
- java 多线程阻塞队列 与 阻塞方法与和非阻塞方法
Queue是什么 队列,是一种数据结构.除了优先级队列和LIFO队列外,队列都是以FIFO(先进先出)的方式对各个元素进行排序的.无论使用哪种排序方式,队列的头都是调用remove()或poll()移 ...
- java多线程12:阻塞队列Queue
本篇主要内容如下: 本篇主要内容 帮你总结好的阻塞队列: 18种Queue总结 一.Queue自我介绍 队列原理图 1.1 Queue自我介绍 hi,大家好,我的英文名叫Queue,中文名叫队列,无论 ...
- Java多线程-新特征-阻塞队列ArrayBlockingQueue
阻塞队列是Java5线程新特征中的内容,Java定义了阻塞队列的接口java.util.concurrent.BlockingQueue,阻塞队列的概念是,一个指定长度的队列,如果队列满了,添加新元素 ...
- Java基础积累:阻塞队列
队列 目录 队列 阻塞队列 常用方法 常用队列 实现原理 阻塞队列 阻塞队列(BlockingQueue)是一个支持如下两个附加操作的队列. A.支持阻塞的插入方法:意思是当队列满时,队列会阻塞插入元 ...
最新文章
- Java项目:家庭财务管理系统(java+Springboot+ssm+mysql+maven)
- pdf转ppt怎么转换,pdf转换ppt的方法分享
- linux下c++實現簡單的生產者消費者隊列模式
- 在asp.net core2.1中添加中间件以扩展Swashbuckle.AspNetCore3.0支持简单的文档访问权限控制...
- 一起学习C语言:C语言循环结构(三)
- javascript this
- python输入不确定个数_将不确定数量的输入传递给一个函数的子函数
- Hadoop学习笔记—13.分布式集群中节点的动态添加与下架
- (jQuery)插件开发模式
- 软件工程设计概念与体系结构设计
- 指纹匹配算法matlab,指纹识别算法matlab程序
- 如何用ps做计算机二级报名照片,等级考试照片PS教程
- wordpress添加Auto Highslide图片灯箱效果
- 苹果app退款_??充值消费退款
- 马科维茨模型的实例验证与思考(含Python代码)
- iPhone手机拍的图片为什么电脑上打不开?秒懂
- EXCEL表格内部换行
- docker开机启动失败_docker安装后启动不了 解决方法
- 中国石油大学《混凝土》第二阶段在线作业
- C语言与JAVA区别