zoukankan      html  css  js  c++  java
  • Java中Queue类实现

    原先在java编程中,Queue的实现都是用LinkedList

     

    1. Queue queue = new LinkedList();  

     

    但正如jdk中所说的那样:

    注意,此实现不是同步的。如果多个线程同时访问一个链接列表,而其中至少一个线程从结构上修改了该列表,则它必须 保持外部同步。(结构修改指添加或删除一个或多个元素的任何操作;仅设置元素的值不是结构修改。)这一般通过对自然封装该列表的对象进行同步操作来完成

    LinkeList显示源码:http://blog.csdn.net/lengyuhong/archive/2010/10/27/5969325.aspx

     

     

    所以为方便起见,可以直接写一个线程安全的LinkedList实现的Queue类,这段程序原先是由我朋友夏裔编写,我只做了一些小的改动,特此说明

    源程序:

     

    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. }  

     

  • 相关阅读:
    Android通知栏介绍与适配总结
    Java emoji持久化mysql
    css自适应
    常用网址总结
    前端开发常用技巧
    JAVA问题集锦Ⅰ
    Android之常见问题集锦Ⅱ
    Java集合之ConcurrentHashMap.addCount解析
    Java集合之ConcurrentHashMap解析
    Java数据结构之Map
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3581490.html
Copyright © 2011-2022 走看看