LinkedTransferQueue
是一个无界队列,是LinkedBlockingQueue、SynchronousQueue(公平模式)、ConcurrentLinkedQueue三者的集合体,综合了三者的方法提供更加高效的实现方式。
其继承结构为:
LinkedBlockingQueue
LinkedBlockingQueue
是一个基于单链表实现的阻塞队列,通过构造器参数可以设定队列容量的大小,如果没有设定默认为Integer.MAX_VALUE
,队列中元素顺序遵循FIFO先进先出的规则。
ArrayBlockingQueue
ArrayBlockingQueue
是由数组实现的有界阻塞队列,数据遵循FIFO先进先出的顺序,一旦创建容量固定无法修改。尝试put
一个元素到满队列则阻塞等待,尝试take
一个元素到满队列亦阻塞等待。支持可选的公平策略控制等待的生产者和消费者获取数据的顺序,默认顺序是无法保证的。public ArrayBlockingQueue(int capacity, boolean fair)
通过构造函数将fair
设置为true能保证线程访问的顺序按照FIFO,这种模式下会降低吞吐量但也能减少可变性、避免饥饿。
SynchronousQueue
SynchronousQueue
实现了BlockingQueue
接口的阻塞队列,比较常见的使用场景就是Executors.newCachedThreadPool()
,下面有个简单的例子来看看其具体使用吧:
CompletableFuture
CompletableFuture
是由并发大师Doug Lea
编写于JDK8中,可以显式的主动控制任务完成并设置结果和状态,并在任务完成后可以结合CompletionStage
提供的接续方法完成相关回调处理。