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相关推荐

  1. c++ string replace_JAVA应用程序开发之String类常用API

    [本文详细介绍了JAVA应用开发中的String类常用API,欢迎读者朋友们阅读.转发和收藏!] 1 基本概念 API ( Application Interface 应用程序接口)是类中提供的接口, ...

  2. 常用API(Object、String、StringBuffer、用户登陆注册)

    常用API 今日内容介绍 u Object u String u StringBuilder 第1章 Java的API及Object类 在以前的学习过程中,我们都在学习对象基本特征.对象的使用以及对象 ...

  3. Selenium Web 自动化 - Selenium常用API

    Selenium Web 自动化 - Selenium常用API 2016-08-01 目录 1 对浏览器操作   1.1 用webdriver打开一个浏览器   1.2 最大化浏览器&关闭浏 ...

  4. 【Netty】NIO 网络通信 SelectionKey 常用 API 简介

    文章目录 I . SelectionKey 简介 II . SelectionKey 事件简介 III . SelectionKey 常用 API 简介 I . SelectionKey 简介 1 . ...

  5. JavaScript一些常用 API整理汇总

    JavaScript一些常用 API整理汇总 Array new Set() 数组去重 const arr = [3,4,4,5,4,6,5,7]; console.log(new Set(arr)) ...

  6. Math工具类常用API使用案例

    对基础API的使用能够熟练掌握,能极大提高开发效率.有些知识是很简单,但并不是我们不学习和掌握它们的借口,越是简单的东西,在关键时刻越是能起到至关重要的作用,就好比我们花很长时间解决的一个BUG,结果 ...

  7. Hibernate一级缓存常用API

    一级缓存特点: 当我们通过session的save,update saveOrupdate进行操作时,如果一级缓存中没有对象,会将这些对象从数据库中查询到,存储到一级缓存. 当我们通过session的 ...

  8. Object类、常用API

    # [Object类.常用API] ## 主要内容 * Object类 * Date类 * DateFormat类 * Calendar类 * System类 * StringBuilder类 * 包 ...

  9. jedis常用API

    2019独角兽企业重金招聘Python工程师标准>>> 一.Redis Client介绍 1.1.简介 Jedis Client是Redis官网推荐的一个面向java客户端,库文件实 ...

最新文章

  1. 2020技术趋势报告-中文版
  2. Mac安装code blocks以及解无法打开的问题
  3. 史上最全的HTML和CSS标签常用命名规则
  4. Toad for Oracle 导入MIP.dmp文件时:报内存不足时的解决办法:
  5. vue 同级页面调用方法_【Vue】一个vue页面调用另一个vue页面中的方法
  6. python实现给定信号生成任意信噪比的带噪声信号
  7. python 会计凭证_实际工作中,大多数单位都使用单式记账凭证。()
  8. 里签名boot有什么用_为什么大家都用苹果企业签名呢?
  9. 智能机器人语音识别技术
  10. [转]10个学习Android开发的网站推荐
  11. java -jar 指定main,java打包成jar并执行jar包中指定的main方法
  12. ffmpeg主要数据结构及其之间的关系
  13. 仿Hex-Editor,实现简单地二进制文件查看器JHexer
  14. CocosCreator3D之相机跟随与旋转
  15. 家用无线网络优化方案
  16. 谈论机器学习中,哪种学习算法更好有意义吗?
  17. 记一次对PUBG吃鸡外挂病毒的反制过程
  18. kafka系列4:消息幂等性
  19. Java 绘制带圆角头像的二维码
  20. python与金融工程的区别_科研进阶 | 纽约大学 | 金融工程、量化金融、商业分析:Python金融工程分析...

热门文章

  1. 安装iis 出现ASP无法访问的解决方法
  2. mysql的脚本默认存_MySQL修改默认存储引擎的实现方法
  3. datagrid传参_DataGrid里面要传两个参数怎么传
  4. linux磁盘满了之后清理
  5. java.library.path在哪?
  6. html表头跟随滚动,JS实现table表格固定表头且表头随横向滚动而滚动_心善_前端开发者...
  7. MySQL重启也无法解决的Warning: World-writable config file '/etc/mysql/my.cnf' is ignored
  8. vue----sourceMap
  9. matlab 复数求模长,matlab计算带有复数的函数,最后求复数函数的模,结果里面却有...
  10. java executor spring_java 线程池(ExecutorService与Spring配置threadPoolTaskExecutor)