【Java面試】簡述一下你對執行緒池的理解?
到底是什麼面試題,
讓一個工作了4年的精神小夥,只是去參加了一場技術面試,
就被搞得精神萎靡。鬱鬱寡歡!
這一切的背後到底是道德的淪喪,還是人性的扭曲。
讓我們一起揭祕一下這道面試題。
關於, “簡述你對執行緒池的理解”,看看普通人和高手的回答。
普通人:
嗯。。。。。。。。。。
高手:
關於這個問題,我會從幾個方面來回答。
首先,執行緒池本質上是一種池化技術,而池化技術是一種資源複用的思想,比較常見的有連線池、記憶體池、物件池。
而執行緒池裡面複用的是執行緒資源,它的核心設計目標,我認為有兩個:
-
減少執行緒的頻繁建立和銷燬帶來的效能開銷,因為執行緒建立會涉及到CPU上下文切換、記憶體分配等工作。
-
執行緒池本身會有引數來控制執行緒建立的數量,這樣就可以避免無休止的建立執行緒帶來的資源利用率過高的問題,
起到了資源保護的作用。
其次,我簡單說一下執行緒池裡面的執行緒複用技術。因為執行緒本身並不是一個受控的技術,也就是說執行緒的生命週期時由任務執行的狀態決定的,無法人為控制。
所以為了實現執行緒的複用,執行緒池裡面用到了阻塞佇列,簡單來說就是執行緒池裡面的工作執行緒處於一直執行狀態,它會從阻塞佇列中去獲取待執行的任務,一旦佇列空了,那這個工作執行緒就會被阻塞,直到下次有新的任務進來。
也就是說,工作執行緒是根據任務的情況實現阻塞和喚醒,從而達到執行緒複用的目的。
最後,執行緒池裡面的資源限制,是通過幾個關鍵引數來控制的,分別是核心執行緒數、最大執行緒數。
核心執行緒數表示預設長期存在的工作執行緒,而最大執行緒數是根據任務的情況動態建立的執行緒,主要是提高阻塞佇列中任務的
處理效率。
以上就是我對這個問題的理解!
總結
我當時在閱讀執行緒池的原始碼的時候,被裡面的各種設計思想驚豔到了。
比如動態擴容和縮容的思想、執行緒的複用思想、以及執行緒回收的方法等等。
我發現越是簡單的東西,反而越不簡單。
更多的面試資料和麵試技巧,可以私信我獲取。
版權宣告:本部落格所有文章除特別宣告外,均採用 CC BY-NC-SA 4.0 許可協議。轉載請註明來自
Mic帶你學架構
! 如果本篇文章對您有幫助,還請幫忙點個關注和贊,您的堅持是我不斷創作的動力。歡迎關注同名微信公眾號獲取更多技術乾貨!
- 【Java面試】簡述一下你對執行緒池的理解?
- 詳解Nacos 配置中心客戶端配置快取動態更新的原始碼實現
- 詳解Nacos 配置中心客戶端配置快取動態更新的原始碼實現
- Spring中的Environment外部化配置管理詳解
- Spring Cloud 原始碼分析之OpenFeign
- Spring Cloud Eureka原始碼分析之心跳續約及自我保護機制
- 分散式服務治理框架Dubbo的前世今生及應用實戰
- 深度剖析Spring Boot自動裝配機制實現原理
- Spring Boot的前世今生以及它和Spring Cloud的關係詳解。
- 學不懂Netty?看不懂原始碼?不存在的,這篇文章手把手帶你閱讀Netty原始碼!
- 手把手教你基於Netty實現一個基礎的RPC框架(通俗易懂)
- 全網最詳細最齊全的序列化技術及深度解析與應用實戰
- 通過大量實戰案例分解Netty中是如何解決拆包黏包問題的?
- 45歲程式設計師,精通各種技術體系,卻連個面試機會都沒有…
- 超過1W字深度剖析JVM常量池(全網最詳細最有深度)
- 詳細剖析分散式微服務架構下網路通訊的底層實現原理(圖解)
- 面試題系列:用了這麼多年的 Java 泛型,我竟然只知道它的皮毛
- 美團面試官問:寫一個你認為最好的單例模式?於是我寫了7個
- 面試題系列:工作5年,第一次這麼清醒的理解final關鍵字?
- 阿里P7面試官:請你簡單說一下類載入機制的實現原理?