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

     

  • 相关阅读:
    面向接口程序设计思想实践
    Block Chain Learning Notes
    ECMAScript 6.0
    Etcd Learning Notes
    Travis CI Build Continuous Integration
    Markdown Learning Notes
    SPRING MICROSERVICES IN ACTION
    Java Interview Questions Summary
    Node.js Learning Notes
    Apache Thrift Learning Notes
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/3581490.html
Copyright © 2011-2022 走看看