atitit. java queue 隊列體系and自訂基於資料庫的隊列總結o7t,atitito7t

來源:互聯網
上載者:User

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. ConcurrentLinkedQueue4. 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. ArrayBlockingQueue4.2. 2. LinkedBlockingQueue

基於鏈表的阻塞隊列

4.3. 3. DelayQueue

DelayQueue中的元素只有當其指定的延遲時間到了,才能夠從隊列中擷取到該元素

4.4. 4. PriorityBlockingQueue

基於優先順序的阻塞隊列(優先順序的判斷通過構造 函數傳入的Compator對象來決定),但需要注意的是PriorityBlockingQueue並不會阻塞資料生產者,而只會在沒有可消費的資料 時,阻塞資料的消費者。因此使用的時候要特別注意,生產者生產資料的速度絕對不能快於消費者消費資料的速度,否則時間一長,會最終耗盡所有的可用堆記憶體空 間。在實現PriorityBlockingQueue時,內部控制線程同步的鎖採用的是公平鎖。

4.5. SynchronousQueue5. 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就行了
 

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.