atitit. java queue 队列体系and自己定义基于数据库的队列总结o7t 1. 堵塞队列和非堵塞队列 2.  java.util.Queue接口, 3. ConcurrentLinkedQueue 4. BlockingQueue堵塞队列 5. LinkedBlockingDeque 乃堵塞双端队列  6. 自己定义队列实现Queue接口 7. 參考

 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

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

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. 堵塞队列和非堵塞队列
2.  java.util.Queue接口,
3. ConcurrentLinkedQueue
4. BlockingQueue堵塞队列
5. LinkedBlockingDeque 乃堵塞双端队列 
6. 自己定义队列实现Queue接口
7. 參考