java中的队列介绍
所属分类 java
浏览量 1431
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安全读书笔记