package com.gf.conn013;

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.concurrent.ArrayBlockingQueue;
import java.util.concurrent.ConcurrentLinkedQueue;
import java.util.concurrent.LinkedBlockingQueue; /**
* ArrayBlockingQueue: 基于属数组的阻塞队列实现,在ArrayBlockingQueue内部,
* 维护了一个定长的数组,以便缓冲队列中的数据对象,
* 其内部没有实现先读写分离,也就意味着生产和消费不能完全并行,长度是需要定义的,可以指定先进先出或先进后出
* 也叫做有界队列,在很多场合非常适合使用
* LinkedBlockingQueue: 基于链表的阻塞队列,同ArrayBlockingQueue类似,
* 其内部也维持着一个数据缓冲队列(该队列由一个链表构成),
* LinkBlocking之所以能够高效的处理并发数据,是因为内部采用分离锁(读写分离两个锁),从而实现生产者和消费者操作的完全并发运行
* 他是一个无界队列
* SynchronousQoueue: 一种没有缓冲的队列,生产者生产的数据直接被消费者获取并消费
*
*
*
* @author huanchu
*
*/
public class UseOueue { public static void main(String[] args) throws Exception { //高性能无阻塞无界队列:ConcurrentLinkedQueue
/**
ConcurrentLinkedQueue<String> q = new ConcurrentLinkedQueue<String>();
q.offer("a");
q.offer("b");
q.offer("c");
q.offer("d");
q.add("e"); System.out.println(q.poll()); //a 从头部去除元素 ,并从队列里删除
System.out.println(q); //b, c, d, e
System.out.println(q.peek()); //b 从头部去除元素 ,并从队列里删除
System.out.println(q); //b, c, d, e
*/ //有界队列
/**
ArrayBlockingQueue<String> array = new ArrayBlockingQueue<>(5);
array.put("a");
array.put("b");
array.add("c");
array.add("d");
array.add("e");
array.add("f");
*/ //阻塞队列 LinkedBlockingQueue<String> q = new LinkedBlockingQueue<String>(6);
q.offer("a");
q.offer("b");
q.offer("c");
q.offer("d");
q.offer("e");
q.add("f");
q.add("g"); //System.out.println(q); for (Iterator iterator = q.iterator(); iterator.hasNext();) {
String string = (String) iterator.next();
System.out.println(string);
} List<String> list = new ArrayList<String>();
//q.drainTo(list); // 取出队列中的所有元素,放入list中
//q.drainTo(list, 3); // 在队列中取出指定数量的元素放入到list中 } }

关注我的公众号,精彩内容不能错过

2. 常见的Queue的更多相关文章

  1. python常见队列queue分类

    import queue # 1.普通q# 2.先进后出q# 3.优先级q 普通Queue q=queue.Queue(3)q.put(1)q.put(2)q.put(3)print(q.get()) ...

  2. 如何让你的JavaScript代码更加语义化

    语义化这个词在 HTML 中用的比较多,即根据内容的结构化选择合适的标签.其作用不容小觑: 赋予标签含义,让代码结构更加清晰,虽然我们可以在标签上添加 class 来标识,但这种通过属性来表示本体的形 ...

  3. Java多线程(六) —— 线程并发库之并发容器

    参考文献: http://www.blogjava.net/xylz/archive/2010/07/19/326527.html 一.ConcurrentMap API 从这一节开始正式进入并发容器 ...

  4. 深入浅出 Java Concurrency (22): 并发容器 part 7 可阻塞的BlockingQueue (2)[转]

    在上一节中详细分析了LinkedBlockingQueue 的实现原理.实现一个可扩展的队列通常有两种方式:一种方式就像LinkedBlockingQueue一样使用链表,也就是每一个元素带有下一个元 ...

  5. RabbitMQ Queue一些常见模式

    懒队列:lazy Queue,即用到的时候才会加载,3.6.0及之后新添加的.当新添加数据后,不会将其放入到内存中,而是将其放入到磁盘中. 普通队列:1).in-memory,数据直接放入到内存中. ...

  6. STL queue 常见用法详解

    <算法笔记>学习笔记 queue 常见用法详解 queue翻译为队列,在STL中主要则是实现了一个先进先出的容器. 1. queue 的定义 //要使用queue,应先添加头文件#incl ...

  7. 常见的Message Queue应用场景

    在最近的工作的里面有同事问到我说,为什么我们需要一个Message Queue,Message Queue可以在哪些地方用,经过一些整理,大概能找到这些点,假如你有这方面的要求,也可以考虑使用Mess ...

  8. queue的常见用法

    queue的使用 queue是什么? queue是一种先入先出的容器 queue的定义 引入 # include <iostream> # include <queue> us ...

  9. C++标准模板库(STL)——queue常见用法详解

    queue的定义 queue<typename> name; queue容器内元素的访问 由于队列本身就是一种先进先出的限制性数据结构,因此在STL中只能通过front()来访问队首元素, ...

随机推荐

  1. scrapy 中 xpath 用string方法提取带有空格符解决方法

    注释掉的是刚开始的代码,匹配的全是带空格的,replace替换不了空格 后面加上了normalize-space()  匹配到的文本内容变成了可replace 问题解决

  2. Key Technologies Primer 读书笔记,翻译 --- Struct 学习 1

    原文链接:https://struts.apache.org/primer.html 本来想写成读书笔记的,结果还是变成翻译,谨作记录,学习.   1.HTML -- 见我前面文章 2.Interne ...

  3. Using iSCSI On Ubuntu 10.04 (Initiator And Target)

    This guide explains how you can set up an iSCSI target and an iSCSI initiator (client), both running ...

  4. Python自动化编程-树莓派的介绍与使用(一)

    Raspberry Pi(中文名为“树莓派”,简写为RPi,(或者RasPi / RPI) [1]  是为学习计算机编程教育而设计),只有信用卡大小的微型电脑,其系统基于Linux.  随着Windo ...

  5. Inotify+Rsync实现Linux服务器文件同步

    做这个功能的时候遇到了好多坑,在此感谢一下这篇博客 http://kerry.blog.51cto.com/172631/734087/  ,大家参照这篇博客就能实现该功能. 另外如果想详细了解一下的 ...

  6. 随手用python写一个下载jdk源码爬虫

    最近在研读jdk源码,网上找了下资源,发现都不完整. 后来新发现了一个有完整源码的地方,主要包括了java,c,c++的东西,装逼需要,就想拿来玩玩.但是,找了好多种下载打开的方式,发现都不对.于是, ...

  7. 一句话的事儿,Head first 设计模式

    head first 设计模式,是比较有趣的一本设计模式的书. 在学校里看书和在工作时看书,意义是不一样的.在学校时是为读书而读书,我们可以从0到1,我们有的是时间.但是工作后就不一样. 我觉得这时的 ...

  8. PHP之ThinkPHP框架(数据库)

    PHP是网站后台开发语言,其重要的操作对象莫过于数据库,之前有了解过mysqli和pdo,但ThinkPHP的数据库交互必须使用其特定的封装方法,或者可以认为其是对PHP数据库操作的进一步封装,以达到 ...

  9. spring cloud+.net core搭建微服务架构:服务注册(一)

    背景 公司去年开始使用dotnet core开发项目.公司的总体架构采用的是微服务,那时候由于对微服务的理解并不是太深,加上各种组件的不成熟,只是把项目的各个功能通过业务层面拆分,然后通过nginx代 ...

  10. .NET西安社区 [拥抱开源,又见 .NET] 活动简报

    拥抱开源, 又见 .NET」 随着 .NET Core的发布和开源,.NET又重新回到了人们的视野.除了开源.跨平台.高性能以及优秀的语言特性,越来越多的第三方开源库也出现在了Github上——包括M ...