Java中Queue類實現

原先在java編程中,Queue的實現都是用LinkedListjava

 

  1. Queue queue = new LinkedList();  

 

但正如jdk中所說的那樣:編程

注意,此實現不是同步的。若是多個線程同時訪問一個連接列表,而其中至少一個線程從結構上修改了該列表,則它必須 保持外部同步。(結構修改指添加或刪除一個或多個元素的任何操做;僅設置元素的值不是結構修改。)這通常經過對天然封裝該列表的對象進行同步操做來完成安全

LinkeList顯示源碼:http://blog.csdn.net/lengyuhong/archive/2010/10/27/5969325.aspx數據結構

 

 

因此爲方便起見,能夠直接寫一個線程安全的LinkedList實現的Queue類,這段程序原先是由我朋友夏裔編寫,我只作了一些小的改動,特此說明spa

源程序:.net

 

  1. import java.util.LinkedList;  
  2. /*** 
  3.  * 隊列,其中關鍵的數據結構是LinkedList 
  4.  * 爲何不用jdk自帶的實現了Queue接口的LinkedList類,而要本身在再寫一遍的緣由是 
  5.  * 注意,此實現不是同步的。若是多個線程同時訪問一個連接列表,而其中至少一個線程從結構上修改了該列表,則它必須 保持外部同步。 
  6.  * (結構修改指添加或刪除一個或多個元素的任何操做;僅設置元素的值不是結構修改。) 
  7.  * 這通常經過對天然封裝該列表的對象進行同步操做來完成 
  8.  * 所以,爲方便起見,直接寫了這個線程同步的Queue對象類 
  9.  * @author xiayi and zhujiadun 
  10.  * time:2010年10月27日14:34:51 
  11.  */  
  12. public class LinkedListQueue<E> {  
  13.     private LinkedList<E> list = new LinkedList<E>();  
  14.     private int size = 0;  
  15.       
  16.     public synchronized void put(E e) {  
  17.         size++;  
  18.         list.addLast(e);  
  19.     }  
  20.     // 使用removeFirst()方法,返回隊列中第一個數據,而後將它從隊列中刪除  
  21.     public synchronized E get() {  
  22.         size--;  
  23.         return list.removeFirst();  
  24.     }  
  25.     public synchronized boolean empty() {  
  26.         boolean flag = false;  
  27.         if(size==0){  
  28.             flag = true;  
  29.         }  
  30.         return flag;  
  31.     }  
  32.       
  33.     public synchronized int size(){  
  34.         return size;  
  35.     }  
  36.     public synchronized void clear() {  
  37.         list.clear();  
  38.         size = 0;  
  39.     }  
  40.       
  41.     public synchronized E get(int i){  
  42.         return list.get(i);  
  43.     }  
  44. }  
相關文章
相關標籤/搜索