BlockingQueue - LinkedBlockingQueue常用API
LinkedBlockingQueue 复习看下表即可
Level. | 放入 | 取出 | ||
---|---|---|---|---|
1 | add |
队列满?异常 :return true
|
remove |
队列空?异常 :return head
|
2 | offer | 队列满?return false:return true | poll | 队列空?return null:return head |
3 | put | 队列满?阻塞:return [void] | take | 队列空?阻塞:return head |
add、offer、put
BlockingQueue 的put、offer、add区别,看注释:
BlockingQueue<Object> taskQueue = new LinkedBlockingQueue<Object>(queueSize);
taskQueue.put(task); // 队列满?阻塞:return void
taskQueue.offer(task); // 队列满?return false:return true
taskQueue.add(task); // 队列满? 报异常:return true;
测试程序:
public static void main(String[] args) {int queueSize = 2;BlockingQueue<Object> taskQueue1 = new LinkedBlockingQueue<Object>(queueSize);BlockingQueue<Object> taskQueue2 = new LinkedBlockingQueue<Object>(queueSize);BlockingQueue<Object> taskQueue3 = new LinkedBlockingQueue<Object>(queueSize);for (int i = 0; i < queueSize + 1; i++) {System.out.println("================for " + (i + 1));Object o = new Object();try {System.out.println("add:" + taskQueue1.add(o));} catch (Exception e) {e.printStackTrace();}System.out.println("offer:" + taskQueue2.offer(o));try {System.out.println("taskQueue3 size:" + taskQueue3.size());taskQueue3.put(o);} catch (InterruptedException e) {e.printStackTrace();}}
}
输出:
================for 1
add:true
offer:true
befor put ,taskQueue3 size:0
after put ,taskQueue3 size:1
================for 2
add:true
offer:true
befor put ,taskQueue3 size:1
after put ,taskQueue3 size:2
================for 3
java.lang.IllegalStateException: Queue fullat java.util.AbstractQueue.add(AbstractQueue.java:98)at com.yh.stu.concurrent.dp.threadpool.dmjuc.DMThreadPool.main(DMThreadPool.java:47)
offer:false
befor put ,taskQueue3 size:2
输出最后一行缺少了after put ,taskQueue3 size:3
, 因为taskQueue3 满了,taskQueue3.put(o)
阻塞等待
2、remove、poll、take
看注释:
taskQueue3.remove(); // 队列空?异常:return head;
taskQueue3.poll(); // 队列空?return null:return head;
taskQueue3.take(); // 队列空?阻塞:return head;
测试程序:
public static void main(String[] args) {int queueSize = 2;BlockingQueue<Object> taskQueue1 = new LinkedBlockingQueue<Object>(queueSize);BlockingQueue<Object> taskQueue2 = new LinkedBlockingQueue<Object>(queueSize);BlockingQueue<Object> taskQueue3 = new LinkedBlockingQueue<Object>(queueSize);new Thread(new Runnable() {@Overridepublic void run() {ThreadUtils.sleep(1000);try {taskQueue3.take(); // 队列空?阻塞:return head;} catch (InterruptedException e) {e.printStackTrace();}}}).start();for (int i = 0; i < queueSize + 1; i++) {System.out.println("================for " + (i + 1));Object o = new Object();try {System.out.println("add:" + taskQueue1.add(o));} catch (Exception e) {e.printStackTrace();}System.out.println("offer:" + taskQueue2.offer(o));try {System.out.println("befor put ,taskQueue3 size:" + taskQueue3.size());taskQueue3.put(o);System.out.println("after put ,taskQueue3 size:" + taskQueue3.size());} catch (InterruptedException e) {e.printStackTrace();}}
}
3、总结
Level. | 放入 | 取出 | ||
---|---|---|---|---|
1 | add |
队列满?异常 :return true
|
remove |
队列空?异常 :return head
|
2 | offer | 队列满?return false:return true | poll | 队列空?return null:return head |
3 | put | 队列满?阻塞:return [void] | take | 队列空?阻塞:return head |
BlockingQueue - LinkedBlockingQueue常用API相关推荐
- c++ string replace_JAVA应用程序开发之String类常用API
[本文详细介绍了JAVA应用开发中的String类常用API,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 API ( Application Interface 应用程序接口)是类中提供的接口, ...
- 常用API(Object、String、StringBuffer、用户登陆注册)
常用API 今日内容介绍 u Object u String u StringBuilder 第1章 Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象 ...
- Selenium Web 自动化 - Selenium常用API
Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作 1.1 用webdriver打开一个浏览器 1.2 最大化浏览器&关闭浏 ...
- 【Netty】NIO 网络通信 SelectionKey 常用 API 简介
文章目录 I . SelectionKey 简介 II . SelectionKey 事件简介 III . SelectionKey 常用 API 简介 I . SelectionKey 简介 1 . ...
- JavaScript一些常用 API整理汇总
JavaScript一些常用 API整理汇总 Array new Set() 数组去重 const arr = [3,4,4,5,4,6,5,7]; console.log(new Set(arr)) ...
- Math工具类常用API使用案例
对基础API的使用能够熟练掌握,能极大提高开发效率.有些知识是很简单,但并不是我们不学习和掌握它们的借口,越是简单的东西,在关键时刻越是能起到至关重要的作用,就好比我们花很长时间解决的一个BUG,结果 ...
- Hibernate一级缓存常用API
一级缓存特点: 当我们通过session的save,update saveOrupdate进行操作时,如果一级缓存中没有对象,会将这些对象从数据库中查询到,存储到一级缓存. 当我们通过session的 ...
- Object类、常用API
# [Object类.常用API] ## 主要内容 * Object类 * Date类 * DateFormat类 * Calendar类 * System类 * StringBuilder类 * 包 ...
- jedis常用API
2019独角兽企业重金招聘Python工程师标准>>> 一.Redis Client介绍 1.1.简介 Jedis Client是Redis官网推荐的一个面向java客户端,库文件实 ...
最新文章
- 2020技术趋势报告-中文版
- Mac安装code blocks以及解无法打开的问题
- 史上最全的HTML和CSS标签常用命名规则
- Toad for Oracle 导入MIP.dmp文件时:报内存不足时的解决办法:
- vue 同级页面调用方法_【Vue】一个vue页面调用另一个vue页面中的方法
- python实现给定信号生成任意信噪比的带噪声信号
- python 会计凭证_实际工作中,大多数单位都使用单式记账凭证。()
- 里签名boot有什么用_为什么大家都用苹果企业签名呢?
- 智能机器人语音识别技术
- [转]10个学习Android开发的网站推荐
- java -jar 指定main,java打包成jar并执行jar包中指定的main方法
- ffmpeg主要数据结构及其之间的关系
- 仿Hex-Editor,实现简单地二进制文件查看器JHexer
- CocosCreator3D之相机跟随与旋转
- 家用无线网络优化方案
- 谈论机器学习中,哪种学习算法更好有意义吗?
- 记一次对PUBG吃鸡外挂病毒的反制过程
- kafka系列4:消息幂等性
- Java 绘制带圆角头像的二维码
- python与金融工程的区别_科研进阶 | 纽约大学 | 金融工程、量化金融、商业分析:Python金融工程分析...
热门文章
- 安装iis 出现ASP无法访问的解决方法
- mysql的脚本默认存_MySQL修改默认存储引擎的实现方法
- datagrid传参_DataGrid里面要传两个参数怎么传
- linux磁盘满了之后清理
- java.library.path在哪?
- html表头跟随滚动,JS实现table表格固定表头且表头随横向滚动而滚动_心善_前端开发者...
- MySQL重启也无法解决的Warning: World-writable config file '/etc/mysql/my.cnf' is ignored
- vue----sourceMap
- matlab 复数求模长,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...
- java executor spring_java 线程池(ExecutorService与Spring配置threadPoolTaskExecutor)