欢迎投稿

今日深度:

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

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


 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

我要啦免费统计

java编程:定义一个表示队列的泛型类Queue,分别对String对象与Integer对象执行入队列与出队列操作

import java.util.ArrayList;
import java.util.LinkedList;
import java.util.List;

public class Queue<T>{
private static LinkedList q;
private T t;
private T getT(T t){
return t;
}
public void setT(T t){
this.t=t;
}
public Queue(T t){
this.t=t;
}
private void offer(){
if(q!=null){
q.offer(t);
}
else{
q=new LinkedList();
q.offer(t);
}
}
public List poll(){
List list=null;
while(q!=null&&q.size()>0){
list=new ArrayList();
list.add(q.poll());
}
return list;
}public static void main(String []args){
Queue<Integer>q=new Queue<Integer>(1);
q.offer();
List list=q.poll();
System.out.println("出队列的元素为:"+list.get(0));
Queue<String>qq=new Queue<String>("1");
q.offer();
List list2=q.poll();
System.out.println("出队列的元素为:"+list2.get(0));

}
// TODO Auto-generated method stub

}
 

java 怎 从数据库批量取数入队列,再逐条处理关键是消息队列的实现

为什么要用到消息队列?
你这个需求貌似只需要队列这个数据结构就行了
使用JDK中自带的就行,LinkedList是实现Queue的

Queue queue = new LinkedList();
queue.add(Object )//尾部添加

queue.remove()//头部取出

你只需要将通过JDBC把数据库取出的对象用循环依次add到queue, 然后再通过循环依次remove就行了
 

www.htsjk.Com true http://www.htsjk.com/shujukunews/2476.html NewsArticle atitit. java queue 队列体系and自定义基于数据库的队列总结o7t,atitito7t atitit.javaqueue队列体系 and 自定义基于数据库的队列总结 o7t 1.阻塞队列和非阻塞队列 1 2.java.util.Queue 接口, 1 3.Concurr...
相关文章
    暂无相关文章
评论暂时关闭