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

 

posted @   brave-sailor  阅读(5986)  评论(0编辑  收藏  举报
编辑推荐:
· SQL Server 2025 AI相关能力初探
· Linux系列:如何用 C#调用 C方法造成内存泄露
· AI与.NET技术实操系列(二):开始使用ML.NET
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
· 被坑几百块钱后,我竟然真的恢复了删除的微信聊天记录!
点击右上角即可分享
微信分享提示