Java并发编程之美 第七章 java并发包中并发队列原理剖析

时间:2021-07-29 17:32:35

ConcurrentLinkedQueue原理探究

线程安全的*非阻塞队列,底层数据结构使用单向链表,入队和出队使用CAS来实现线程安全

通过UNSafe工具类提供的CAS算法来控制某时只有一个线程可以追加元素到队列末尾,

 

 

 

LinkedBlockingQueue原理探究

单向链表,使用头尾节点来进行入队和出队操作,入队操作尾节点,出队操作头节点

 

 

 

 

ArrayBlockingQueue原理探究

底层是有界数组,使用全局独占锁实现了只能有一个线程进行入队或者出队操作

 

 

 

 

PriorityBlockingQueue原理探究

带有优先级的*阻塞队列,每次出队都返回优先级最高或者最低的元素,内部是平衡二叉树堆

使用数组作为元素存储的数据结构,这个数组是可通过CAS算法扩容的,

出队保证元素是堆树的根节点

使用一个独占锁来控制只有一个线程进行入队和出队操作

 

 

 

 

DelayQueue原理探究

*阻塞延迟队列,每个元素都有过期时间,当从队列获取元素时,只有过期元素才会出队列。队列头元素是最快要过期的元素

内部使用PriorityQueue存放数据,使用ReentrantLock实现线程同步