站长手册

您现在的位置是:首页 > 分类 > 正文

分类

阻塞队列的简单了解

ghjk2020-07-27分类26
队列的阻塞插入:当队列满时,队列会阻塞插入元素的线程,直到队列不满队列的阻塞移除:当队列为空时,获取元素的线程会等待队列变为非空BlockingQueue提供的方法如下,其中put和take是阻塞操作

队列的阻塞插入:当队列满时,队列会阻塞插入元素的线程,直到队列不满

队列的阻塞移除:当队列为空时,获取元素的线程会等待队列变为非空

BlockingQueue提供的方法如下,其中put和take是阻塞操作

操作方法 抛出异常 返回特殊值 阻塞线程 超时退出

插入元素 add(e) offer(e) put(e) offer(e, timeout, unit)

移除元素 remove() poll() take() pull(timeout, unit)

检查 element() peek() 无 无

ArrayBlockingQueue

ArrayBlockingQueue是用数组实现的有界阻塞队列,必须指定队列大小,先进先出(FIFO)原则排队

LinkedBlockingQueue

是用链表实现的有界阻塞队列,如果构造LinkedBlockingQueue时没有指定大小,则默认是Integer.MAX_VALUE,无限大

该队列生产端和消费端使用独立的锁来控制数据操作,以此来提高队列的并发性

PriorityBlockingQueue

public PriorityBlockingQueue(int initialCapacity, Comparator<? super E> comparator)

基于数组,元素具有优先级的无界阻塞队列,优先级由Comparator决定

PriorityBlockingQueue不会阻塞生产者,却会在没有可消费的任务时,阻塞消费者

DelayQueue

支持延时获取元素的无界阻塞队列,基于PriorityQueue实现

元素必须实现Delayed接口,指定多久才能从队列中获取该元素。

可用于缓存系统的设计、定时任务调度等场景的使用

SynchronousQueue

SynchronousQueue是一种无缓冲的等待队列,添加一个元素必须等待被取走后才能继续添加元素

LinkedTransferQueue

由链表组成的TransferQueue无界阻塞队列,相比其他队列多了tryTransfer和transfer函数

transfer:当前有消费者正在等待元素,则直接传给消费者,否则存入队尾,并阻塞等待元素被消费才返回

tryTransfer:试探传入的元素是否能直接传给消费者。如果没消费者等待消费元素,元素加入队尾,返回false

LinkedBlockingDeque

LinkedBlockingDeque是由链表构建的双向阻塞队列,多了一端可操作入队出队,少了一半的竞争,提高并发性

发表评论

评论列表

  • 这篇文章还没有收到评论,赶紧来抢沙发吧~