原先在java編程中,Queue的實現都是用LinkedListjava
- Queue queue = new LinkedList();
但正如jdk中所說的那樣:編程
注意,此實現不是同步的。若是多個線程同時訪問一個連接列表,而其中至少一個線程從結構上修改了該列表,則它必須 保持外部同步。(結構修改指添加或刪除一個或多個元素的任何操做;僅設置元素的值不是結構修改。)這通常經過對天然封裝該列表的對象進行同步操做來完成安全
LinkeList顯示源碼:http://blog.csdn.net/lengyuhong/archive/2010/10/27/5969325.aspx數據結構
因此爲方便起見,能夠直接寫一個線程安全的LinkedList實現的Queue類,這段程序原先是由我朋友夏裔編寫,我只作了一些小的改動,特此說明spa
源程序:.net
- import java.util.LinkedList;
-
-
-
-
-
-
-
-
-
-
- public class LinkedListQueue<E> {
- private LinkedList<E> list = new LinkedList<E>();
- private int size = 0;
-
- public synchronized void put(E e) {
- size++;
- list.addLast(e);
- }
-
- public synchronized E get() {
- size--;
- return list.removeFirst();
- }
- public synchronized boolean empty() {
- boolean flag = false;
- if(size==0){
- flag = true;
- }
- return flag;
- }
-
- public synchronized int size(){
- return size;
- }
- public synchronized void clear() {
- list.clear();
- size = 0;
- }
-
- public synchronized E get(int i){
- return list.get(i);
- }
- }