poll和peek方法出错进返回null。因此,向队列中插入null值是不合法的

import java.util.concurrent.LinkedBlockingQueue;public class Main {public static void main(String[] args) {LinkedBlockingQueue<Integer> queue =new LinkedBlockingQueue<Integer>();for (int i = 1; i < 10; i++) {queue.add(i);}//先进先出,并删除System.out.println(queue.poll());System.out.println(queue.poll());System.out.println(queue.poll());//获取第一个元素·但不删除System.out.println(queue.element());System.out.println(queue);}
}

LinkedBlockingQueue的容量是没有上限的(说的不准确,在不指定时容量为Integer.MAX_VALUE,不要然的话在put时怎么会受阻呢),但是也可以选择指定其最大容量,它是基于链表的队列,此队列按 FIFO(先进先出)排序元素。

remove、element、offer 、poll、peek 其实是属于Queue接口。 

测试队列


import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.BlockingQueue;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
public class BlockingQueueTest {/**定义装苹果的篮子*/public static class Basket{// 篮子,能够容纳3个苹果BlockingQueue<String> basket = new ArrayBlockingQueue<String>(3);// 生产苹果,放入篮子public void produce() throws InterruptedException{// put方法放入一个苹果,若basket满了,等到basket有位置basket.put("An apple");}// 消费苹果,从篮子中取走public String consume() throws InterruptedException{// get方法取出一个苹果,若basket为空,等到basket有苹果为止String apple = basket.take();return apple;}public int getAppleNumber(){return basket.size();}}// 测试方法public static void testBasket() {// 建立一个装苹果的篮子final Basket basket = new Basket();// 定义苹果生产者class Producer implements Runnable {public void run() {try {while (true) {// 生产苹果System.out.println("生产者准备生产苹果:" + System.currentTimeMillis());basket.produce();System.out.println("生产者生产苹果完毕:" + System.currentTimeMillis());System.out.println("生产完后有苹果:"+basket.getAppleNumber()+"个");// 休眠300msThread.sleep(300);}} catch (InterruptedException ex) {}}}// 定义苹果消费者class Consumer implements Runnable {public void run() {try {while (true) {// 消费苹果System.out.println("消费者准备消费苹果:" + System.currentTimeMillis());basket.consume();System.out.println("消费者消费苹果完毕:" + System.currentTimeMillis());System.out.println("消费完后有苹果:"+basket.getAppleNumber()+"个");// 休眠1000msThread.sleep(1000);}} catch (InterruptedException ex) {}}}ExecutorService service = Executors.newCachedThreadPool();Producer producer = new Producer();Consumer consumer = new Consumer();service.submit(producer);service.submit(consumer);// 程序运行10s后,所有任务停止try {Thread.sleep(10000);} catch (InterruptedException e) {}service.shutdownNow();}public static void main(String[] args) {BlockingQueueTest.testBasket();}
}

LinkedBlockingQueue使用相关推荐

  1. 有界阻塞队列ArrayBlockingQueue和无界阻塞队列LinkedBlockingQueue

    ArrayBlockingQueue和LinkedBlockingQueue最大的区别是一个是有界无界,各有优劣. 先看实例代码: main函数起2个线程模拟生成消费者 import java.uti ...

  2. LinkedBlockingQueue应用实例

    并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列.该类主要提供了两个方法put()和take(),前者将一个对象放到队列中,如果队列已经满了,就等待直到有空闲节点:后者从 ...

  3. 无界阻塞队列 LinkedBlockingQueue 原理探究

    2019独角兽企业重金招聘Python工程师标准>>> 一.前言 本文介绍下使用独占锁实现的阻塞队列LinkedBlockingQueue的实现. 二. LinkedBlocking ...

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

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

  5. LinkedBlockingQueue源码解析(1)

    此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.对于LinkedBlockingQueue需要掌握以下几点 创建 入队(添加元素) 出队(删除元素) 2 ...

  6. LinkedBlockingQueue 解析

    LinkedBlockingQueue 类的作用: 首先有三个关键字: 1.Linked 2.Blocking 3.Queue 1.首先是一个队列. 2.是一个阻塞队列. 3.由链表实现. 作用: 当 ...

  7. LinkedBlockingQueue 注记

    近期看一个音频传输代码时,对方采用了LinkedBlockingQueue为生产者.消费者模式,来支撑读写线程. 个人感觉非常不错,因此也对这种方式进行总结,并梳理了一个基本的功能框架备用.主要两点: ...

  8. java 阻塞队列 LinkedBlockingQueue ArrayBlockingQueue 分析

    BlockingQueue是阻塞队列接口类,该接口继承了Queue接口 BlockingQueue实现类常见的有以下几种. ArrayBlockingQueue:ArrayBlockingQueue ...

  9. Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue

    功能简介: LinkedBlockingQueue是一种基于单向链表实现的有界的(可选的,不指定默认int最大值)阻塞队列.队列中的元素遵循先入先出 (FIFO)的规则.新元素插入到队列的尾部,从队列 ...

  10. LInkedBlockingQueue队列

    LInkedBlockingQueue 也称为无界队列 基于链表的阻塞队列 内部维持着一个数据缓冲队列 该队列由一个链表构成 之所以能够高效的处理并发数据 因为,内部实现采用分离锁,读写分离两个锁 从 ...

最新文章

  1. 各类攻击 单一协议 pcap数据包 下载网站
  2. PHP获取客户端的网卡mac物理地址
  3. 每天学一点儿shell:linux中时间函数的date的用法
  4. JS---捕捉URL地址,以及模仿GET方法
  5. Spring和Junit整合
  6. Hemberg-lab单细胞转录组数据分析(三)
  7. 用Excel对会员客户交易数据进行RFM分析
  8. 解决word错误提示宏错误提示和模板错误提示
  9. Win7系统中unity web player是什么程序
  10. 一起学英语 | 用JavaScript实现数字阶乘的三种方法
  11. 010 Editor 8.0.1 之 逆向分析及注册机编写
  12. 两张图轻松搞懂 二进制 八进制 十进制 十六进制 之间的转换关系
  13. 【卸载神器——Geek】的下载安装使用教程
  14. 支持笔锋效果的手写签字控件
  15. 网页设计语言html做思维导图,纯css3实现思维导图样式示例
  16. 一个简单的蓝牙指令测试工具
  17. 新手入门linux必看
  18. 徐东山:腾讯云安全的使命和技术实现
  19. 开启Mac的壁纸自动更换功能
  20. 二次创业,都市丽人照旧

热门文章

  1. 机器学习基础-神经网络-10
  2. 【数据分析】线性回归与逻辑回归
  3. c语言编写经验逐步积累3
  4. AI应用开发实战 - 手写识别应用入门
  5. Windows 安装 MySQL 8.0.11
  6. labview事件结构
  7. linux一路填坑...
  8. centos 6.5 安装 redis
  9. opencv矩阵操作函数查询
  10. IPhone 应用程序管理