30分鐘帶你瞭解阻塞佇列所有內容,再也不怕面試官刁難你了!(上)
阿新 • • 發佈:2020-05-28
## 30分鐘帶你瞭解阻塞佇列所有內容,再也不怕面試官刁難你了!(上)
### 目錄
* [1、概述](#abstract)
* [2、BlockingQueue 原始碼解析](#blockingqueue)
* [3、ArrayBlockingQueue 原始碼解析](#arrayblockingqueue)
* [3-1、ArrayBlockingQueue 概述](#arrayblockingqueue_abstract)
* [3-2、ArrayBlockingQueue 原始碼](#arrayblockingqueue_code)
* [3-3、ArrayBlockingQueue 總結](#arrayblockingqueue_conclusion)
* [4、LinkedBlockingQueue 原始碼解析](#linkedblockingqueue)
* [4-1、LinkedBlockingQueue 概述](#linkedblockingqueue_abstract)
* [4-2、LinkedBlockingQueue 原始碼](#linkedblockingqueue_code)
* [4-3、LinkedBlockingQueue 總結](#linkedblockingqueue_conclusion)
* [5、PriorityBlockingQueue 原始碼解析](#priorityblockingqueue)
* [5-1、PriorityBlockingQueue 概述](#priorityblockingqueue_abstract)
* [5-2、PriorityBlockingQueue 原始碼](#priorityblockingqueue_code)
* [5-3、PriorityBlockingQueue 總結](#priorityblockingqueue_conclusion)
**嘔心瀝血,耗費一週的時間來看原始碼,這麼優秀的博主你難道不關注一下?**
### 1、概述
今天在整理執行緒池的相關內容時,發現許多面試官對於阻塞佇列這塊內容問的還是挺挺深入的。事實上也是,公司招人的時候,總不會去招那些只會用,但是不知道為什麼的人吧。而且阻塞佇列是執行緒池的核心內容,因此我們將這塊內容給搞懂了,這樣才能在開發中遊刃有餘,在面試時鎮定自若。
然而在找尋相關部落格的時候,發現除了大部分部落格千篇一律的copy之外,一些原創部落格出現一些內容不全、不明原理、甚至內容重複的現象,這真的是對我們求知若渴的孩子的打擊。因此,我從 IDEA 中的類圖功能一個個找過去,給大家解讀原始碼,所以,這裡,**以我為準**。
先給大家看一下`BlockingQueue`的相關類的圖。(???為什麼是`BlockingQueue`?兄弟快去看看執行緒池建構函式的引數!)
[](/Users/y1271752959m/Documents/WorkHardAndFindJob/複習/面試/images/2.png)
### 2、BlockingQueue 原始碼解析
`BlockingQueue`是一個介面,它繼承了`Queue`介面。然後下面是它的方法:
```
// 這裡我們看到 BlockingQueue 是一個泛型介面,但是我們線上程池中用的是 Runnable 介面也就是執行緒可執行動作。這裡瞭解一下
public interface Block