原先在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);
- }
- }