本文從JDK
源碼包中截取出concurrent
包的全部類,對該包總體結構進行一個概述。
在JDK1.5
以前,Java
中要進行併發編程時,一般須要由程序員獨立完成代碼實現。固然也有一些開源的框架提供了這些功能,可是這些框架依然沒有JDK
自帶的功能使用起來方便。html
而當針對高質量Java
多線程併發程序設計時,好比使用Java
以前的wait()
、notify()
和synchronized
等,須要考慮性能、死鎖、公平性、資源管理以及如何避免線程安全性方面帶來的危害等諸多因素,每每會採用一些較爲複雜的安全策略,加劇了程序員的開發負擔。java
萬幸的是,在JDK1.5
出現以後,Sun
大神(Doug Lea
)推出了java.util.concurrent
工具包以簡化併發完成。開發者們藉助於此,將有效的減小競爭條件(race conditions
)和死鎖線程。concurrent
包很好的解決了這些問題,爲咱們提供了更實用的併發程序模型。程序員
JDK
的java.util.concurrent
包,包含兩個子包atomic
和locks
。面試
atomic包含原子類。
編程
locks包包含鎖相關的類,如lock、condition等
安全
concurrent包下包含一些併發工具類,如Executors、Semaphore、CountDownLatch、CyclicBarrier、BlockingQueue等。
多線程
上面是JDK源碼中的concurrent包的結構,下面根據使用場景對J.U.C進行了分類。J.U.C核心由5大塊組成:atomic包、locks包、collections包、tools包(AQS)、executor包(線程池)。
注意,此處的包是按使用邏輯分類的,不是實際的代碼結構。併發
參考資料:
java的concurrent用法詳解
java.util.concurrent包源碼分析
閱讀jdk源碼
面試中併發類問題的準備和學習框架