首页   快速返回

java中的队列介绍
文章分类 java
发布时间 2018-11-16 修改时间 2018-11-16
Queue分类

非阻塞的Queue

ConcurrentLinkedQueue 基于 linked list 实现


BlockingQueue

ArrayBlockingQueue   基于数组 大小固定 
LinkedBlockingQueue  基于linked list
PriorityBlockingQueue 基于heap  array-based binary heap   
DelayQueue            基于heap  基于优先队列实现  适用于 延迟任务、定期任务、周期任务 执行
SynchronizeQueue      基于linked List
LinkedTransferQueue


基本方法 

添加元素 队尾添加

add 添加元素,添加成功返回true,容量满了添加失败抛出IllegalStateException
offer 添加元素,添加成功返回true,添加失败返回false。可以设定超时时间 
put 添加元素,容量满了会阻塞 


获取/删除元素

poll 删除队头元素,如果队列为空,返回null。否则返回元素。
remove 找到对应的元素,并删除。删除成功返回true,否则返回false
take 删除队头元素,队列为空则阻塞


peek 方法用于查看队头元素 ,队列为空返回Null
Retrieves, but does not remove, the head of this queue,or returns null if this queue is empty.
   
阻塞方法 BlockingQueue 才有 
  
void put(E e) throws InterruptedException
E take() throws InterruptedException
boolean offer(E e, long timeout, TimeUnit unit) throws InterruptedException  
E poll(long timeout, TimeUnit unit) throws InterruptedException

操作结果 

抛异常  如果操作无法立即执行,抛异常。
特定值  如果操作无法立即执行,返回一个特定的值(譬如 true / false)。
阻塞    如果操作无法立即执行,阻塞。
超时    如果操作无法立即执行,阻塞,直到能够执行,但等待时间不会超过给定值。返回特定值表示该操作是否成功(譬如true / false)。


 ArrayBlockingQueue 大小固定,较适合作为有界缓冲
 LinkedBlockingQueue 基于链表实现, 大小可变,更加灵活。默认最大容量为Integer.MAX_VALUE 注意内存可能被耗尽
 队首和队尾两把锁  putlock takelock  可以实现读写并发,吞吐性能高
 SynchronousQueue 容量为0
 PriorityBlockingQueue 基于heap的数据结构(array-based binary heap) 元素需要 实现Comparable接口

上一篇     下一篇
技术文章合集1

aerospike安装记录

redhat linux和centos的区别与联系

http get 与 post 请求区别

web开发安全知识点整理

白帽子讲Web安全读书笔记