LinkedBlockingQueue使用
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使用相关推荐
- 有界阻塞队列ArrayBlockingQueue和无界阻塞队列LinkedBlockingQueue
ArrayBlockingQueue和LinkedBlockingQueue最大的区别是一个是有界无界,各有优劣. 先看实例代码: main函数起2个线程模拟生成消费者 import java.uti ...
- LinkedBlockingQueue应用实例
并发库中的BlockingQueue是一个比较好玩的类,顾名思义,就是阻塞队列.该类主要提供了两个方法put()和take(),前者将一个对象放到队列中,如果队列已经满了,就等待直到有空闲节点:后者从 ...
- 无界阻塞队列 LinkedBlockingQueue 原理探究
2019独角兽企业重金招聘Python工程师标准>>> 一.前言 本文介绍下使用独占锁实现的阻塞队列LinkedBlockingQueue的实现. 二. LinkedBlocking ...
- 并发编程(九)—— Java 并发队列 BlockingQueue 实现之 LinkedBlockingQueue 源码分析...
LinkedBlockingQueue 在看源码之前,通过查询API发现对LinkedBlockingQueue特点的简单介绍: 1.LinkedBlockingQueue是一个由链表实现的有界队列阻 ...
- LinkedBlockingQueue源码解析(1)
此文已由作者赵计刚授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 1.对于LinkedBlockingQueue需要掌握以下几点 创建 入队(添加元素) 出队(删除元素) 2 ...
- LinkedBlockingQueue 解析
LinkedBlockingQueue 类的作用: 首先有三个关键字: 1.Linked 2.Blocking 3.Queue 1.首先是一个队列. 2.是一个阻塞队列. 3.由链表实现. 作用: 当 ...
- LinkedBlockingQueue 注记
近期看一个音频传输代码时,对方采用了LinkedBlockingQueue为生产者.消费者模式,来支撑读写线程. 个人感觉非常不错,因此也对这种方式进行总结,并梳理了一个基本的功能框架备用.主要两点: ...
- java 阻塞队列 LinkedBlockingQueue ArrayBlockingQueue 分析
BlockingQueue是阻塞队列接口类,该接口继承了Queue接口 BlockingQueue实现类常见的有以下几种. ArrayBlockingQueue:ArrayBlockingQueue ...
- Jdk1.6 JUC源码解析(13)-LinkedBlockingQueue
功能简介: LinkedBlockingQueue是一种基于单向链表实现的有界的(可选的,不指定默认int最大值)阻塞队列.队列中的元素遵循先入先出 (FIFO)的规则.新元素插入到队列的尾部,从队列 ...
- LInkedBlockingQueue队列
LInkedBlockingQueue 也称为无界队列 基于链表的阻塞队列 内部维持着一个数据缓冲队列 该队列由一个链表构成 之所以能够高效的处理并发数据 因为,内部实现采用分离锁,读写分离两个锁 从 ...
最新文章
- 各类攻击 单一协议 pcap数据包 下载网站
- PHP获取客户端的网卡mac物理地址
- 每天学一点儿shell:linux中时间函数的date的用法
- JS---捕捉URL地址,以及模仿GET方法
- Spring和Junit整合
- Hemberg-lab单细胞转录组数据分析(三)
- 用Excel对会员客户交易数据进行RFM分析
- 解决word错误提示宏错误提示和模板错误提示
- Win7系统中unity web player是什么程序
- 一起学英语 | 用JavaScript实现数字阶乘的三种方法
- 010 Editor 8.0.1 之 逆向分析及注册机编写
- 两张图轻松搞懂 二进制 八进制 十进制 十六进制 之间的转换关系
- 【卸载神器——Geek】的下载安装使用教程
- 支持笔锋效果的手写签字控件
- 网页设计语言html做思维导图,纯css3实现思维导图样式示例
- 一个简单的蓝牙指令测试工具
- 新手入门linux必看
- 徐东山:腾讯云安全的使命和技术实现
- 开启Mac的壁纸自动更换功能
- 二次创业,都市丽人照旧