atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t

1. 堵塞队列和非堵塞队列 1

2. java.util.Queue接口。 1

3. ConcurrentLinkedQueue 2

4. BlockingQueue堵塞队列 2

4.1. 1. ArrayBlockingQueue 3

4.2. 2. LinkedBlockingQueue 3

4.3. 3. DelayQueue 3

4.4. 4. PriorityBlockingQueue 3

4.5. SynchronousQueue 3

5. LinkedBlockingDeque 乃堵塞双端队列 3

6. 自己定义队列实现Queue接口 4

7. 參考 4

1. 堵塞队列和非堵塞队列

多数生产消费模型的首选数据结构就是队列。

Java提供的线程安全的Queue能够分为堵塞队列和非堵塞队列,当中堵塞队列的典型样例是BlockingQueue,非堵塞队列的典型样例是ConcurrentLinkedQueue,在实际应用中要依据实际须要选用堵塞队列或者非堵塞队列。

同步是堵塞模式。异步是非堵塞模式

作者:: 老哇的爪子 Attilax 艾龙。  EMAIL:1466519819@qq.com

转载请注明来源: http://blog.csdn.net/attilax

2.  java.util.Queue接口,

在java5中新添加了java.util.Queue接口。

用以支持队列的常见操作。

该接口扩展了java.util.Collection接口。

Queue使用时要尽量避免Collection的add()和remove()方法。而是要使用offer()来增加元素,使用poll()来获取并移出元素。它们的优

点是通过返回值能够推断成功与否,add()和remove()方法在失败的时候会抛出异常。 假设要使用前端而不移出该元素。使用

element()或者peek()方法。

值得注意的是LinkedList类实现了Queue接口,因此我们能够把LinkedList当成Queue来用。

3. ConcurrentLinkedQueue

4. BlockingQueue堵塞队列

 BlockingQueue不光实现了一个完整队列所具有的基本功能。同一时候在多线程环境下,他还自己主动管理了多线间的自己主动等待于唤醒功能,从而使得程序猿能够忽略这些细节,关注更高级的功能。

堵塞实现通常使用加锁上实现...

常见BlockingQueue

在了解了BlockingQueue的基本功能后。让我们来看看BlockingQueue家庭大致有哪些成员?

首先,看看BlockingQueue提供的经常用法:

可能报异常

返回布尔值

可能堵塞

设定等待时间

入队

add(e)

offer(e)

put(e)

offer(e, timeout, unit)

出队

remove()

poll()

take()

poll(timeout, unit)

查看

element()

peek()

· 

从上表能够非常明显看出每一个方法的作用,这个不用多说。我想说的是: add(e) remove() element() 方法不会堵塞线程。当不满足约束条件时,会抛出IllegalStateException 异常。比如:当队列被元素填满后。再调用add(e)。则会抛出异常。

· offer(e) poll() peek() 方法即不会堵塞线程,也不会抛出异常。比如:当队列被元素填满后,再调用offer(e)。则不会插入元素,函数返回false。

· 要想要实现堵塞功能,须要调用put(e) take() 方法。

当不满足约束条件时,会堵塞线程。

BlockingQueue成员具体介绍

4.1. 1. ArrayBlockingQueue

4.2. 2. LinkedBlockingQueue

基于链表的堵塞队列

4.3. 3. DelayQueue

DelayQueue中的元素仅仅有当其指定的延迟时间到了。才可以从队列中获取到该元素

4.4. 4. PriorityBlockingQueue

基于优先级的堵塞队列(优先级的推断通过构造 函数传入的Compator对象来决定),但须要注意的是PriorityBlockingQueue并不会堵塞数据生产者,而仅仅会在没有可消费的数据 时。堵塞数据的消费者。因此使用的时候要特别注意,生产者生产数据的速度绝对不能快于消费者消费数据的速度。否则时间一长,会终于耗尽全部的可用堆内存空 间。

在实现PriorityBlockingQueue时,内部控制线程同步的锁採用的是公平锁。

4.5. SynchronousQueue

5. LinkedBlockingDeque 乃堵塞双端队列

ArrayDeque 双向队列 

LinkedBlockingDeque 堵塞双端队列 

ArrayBlockingQueue 双向并发堵塞队列 

LinkedBlockingQueue FIFO队列 

ConcurrentLinkedQueue 基于链接节点的无界线程安全队列 

PriorityBlockingQueue 带优先级的无界堵塞队列 

还有非常多非常多,能够看看AbstractQueue。 Deque有哪些实现类。

6. 自己定义队列实现Queue接口

实现add  ,remove (obj) 方法...

And 大批量操作方法...   addBatch  ,  peekBatch   ,

7. 參考

java中线程队列BlockingQueue的使用方法-shwenwen-ITPUB博客.htm

Java并发包中的同步队列SynchronousQueue实现原理 _ 并发编程网 - ifeve.com.htm

Java多线程总结之线程安全队列Queue - 火木棉的日志 - 网易博客.htm

atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t的更多相关文章

  1. atitit. java queue 队列体系and自定义基于数据库的队列总结o7t

    atitit. java queue 队列体系and自定义基于数据库的队列总结o7t 1. 阻塞队列和非阻塞队列 1 2. java.util.Queue接口, 1 3. ConcurrentLink ...

  2. atitit. 集合groupby 的实现(2)---自己定义linq查询--java .net php

    atitit.  集合groupby 的实现(2)---自己定义linq查询--java .net php 实现方式有例如以下 1. Linq的实现原理流程(ati总结) 1 2. groupby   ...

  3. Java Queue 队列

    队列是一种先进先出的数据结构,队列中插入元素和删除元素分别位于队列的两端. 在Java中 队列实现类众多,本文不再赘述.本文探讨的是如何自定义队列实现类: 基于数组方式实现队列: 注意点: 当出队时队 ...

  4. C#与Java对比学习:数据类型、集合类、栈与队列、迭达、可变参数、枚举

    数据类型: C#:String与StringBuilder Java:String与StringBuffer 第一个不习惯是string的第一个字母必须大写了. 第二个不习惯是int得写成Intege ...

  5. Atitit.提升软件稳定性---基于数据库实现的持久化 循环队列 环形队列

    Atitit.提升软件稳定性---基于数据库实现的持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...

  6. Atitit.升级软件的稳定性---基于数据库实现持久化 循环队列 循环队列

    Atitit.升级软件的稳定性---基于数据库实现持久化  循环队列 环形队列 1. 前言::选型(马) 1 2. 实现java.util.queue接口 1 3. 当前指针的2个实现方式 1 1.1 ...

  7. Java Queue 专题

    关于java中的Queue,经常用到,做个总结 Queue是一种很常见的数据结构类型,在java里面Queue是一个接口,它只是定义了一个基本的Queue应该有哪些功能规约. (Java中的集合包括三 ...

  8. Java调试平台体系JPDA

    Java 平台调试体系(Java Platform Debugger Architecture,JPDA)定义了一个完整独立的体系,它由三个相对独立的层次共同组成,而且规定了它们三者之间的交互方式,或 ...

  9. 数据结构——java Queue类

    定义 队列是一种特殊的线性表,它只允许在表的前端进行删除操作,而在表的后端进行插入操作. LinkedList类实现了Queue接口,因此我们可以把LinkedList当成Queue来用 图例 Que ...

随机推荐

  1. (转)Java 虚拟机体系结构

    来源:http://hxraid.iteye.com/blog/676235 众所周知,Java源代码被编译器编译成class文件.而并不是底层操作系统可以直接执行的二进制指令(比如Windows O ...

  2. linux 安装常用库

    在CentOS安装软件的时候,可能缺少一部分支持库,而报错.这里首先安装系统常用的支持库.那么在安装的时候就会减少很多的错误的出现. [root@bogon 桌面]#  yum install -y ...

  3. JDBC读写MySQL的大字段数据

    JDBC读写MySQL的大字段数据   不管你是新手还是老手,大字段数据的操作常常令你感到很头痛.因为大字段有些特殊,不同数据库处理的方式不一样,大字段的操作常常是以流的方式 来处理的.而非一般的字段 ...

  4. Centos6.6 系统优化

    1:最小化安装 2:修改网卡 vim /etc/sysconfig/network-scripts/ifcfg-eth0 DEVICE=eth0HWADDR=52:54:00:0e:c2:c3TYPE ...

  5. python3爬取全民K歌

    Python3爬取全民k歌 环境 python3.5 + requests 1.通过歌曲主页链接爬取 首先打开歌曲主页,打开开发者工具(F12). 选择Network,点击播放,会发现有一个请求返回的 ...

  6. Laravel修炼:服务容器绑定与解析

    前言   老实说,第一次老大让我看laravel框架手册的那天早上,我是很绝望的,因为真的没接触过,对我这种渣渣来说,laravel的入门门槛确实有点高了,但还是得硬着头皮看下去(虽然到现在我还有很多 ...

  7. 【BZOJ 1260】[CQOI2007]涂色paint

    [链接] 我是链接,点我呀:) [题意] 在这里输入题意 [题解] 区间DP 设f[i][j]表示i..j这个区间变成目标需要的最少染色次数. f[i][i] = 1 然后考虑f[i][j]的产生方法 ...

  8. IOS音频架构之Audio Unit

    在前面的章节部分我们已经对IOS音频结构有了一个清晰的认识,知道Audio Unit是位于整个音频结构的最底层,这一层非常多API已经開始和硬件打交道了.所以比較复杂,有了前面的基础再来看这个部分就比 ...

  9. mvc中使用remote属性来做ajax验证

    mvc中使用remote属性来做ajax验证比較easy : [Remote("Action", "Controller", AdditionalFields ...

  10. Mono源码学习笔记:Console类(四)

    NullStream 类 (internal class) 以下就是 mcs/class/corlib/System.IO/NullStream.cs: 01: namespace System.IO ...