java併發編程簡介

最近看完《Java併發編程的藝術》一書,收穫頗豐,在此寫一下java併發編程的概要之類的文章,概述java併發編程的一些工具和原理。
《Java併發編程的藝術》和《java編程思想》大概內容差不多,《Java併發編程的藝術》多了些併發編程工具的原理介紹,介紹的比較深入。它裏面講的關於多核心的cpu如何進行多線程操作,線程之間的共享變量的可見性如何實現。順序優化方面,介紹了java的編譯器順序優化、指令級優化、內存系統重排序,而爲了結果的一致性,java編譯器會進行插入內存屏障來限制java語句的順序重排。然後介紹volatile和synchronied、Lock、final的內存語義,雙重檢查鎖定與類加載的線程安全性的解釋。接着介紹線程的一些基本用法,線程之間的通訊。然後介紹Lock鎖的原理,對同步器進行介紹,在瞭解同步器之後,可以實現自己的鎖。關於鎖書裏介紹了偏向鎖、輕量級鎖、重量級鎖、可重入鎖、公平鎖、非公平鎖、讀寫鎖。接着介紹了java併發容器,ConcurrentHashMap、ConcurrentLinkedQueue、阻塞隊列等,介紹Fork/Join框架,介紹13個原子操作類。然後介紹併發的工具,等待多線程完成的CountDownLatch、CyclicBarrier、控制併發線程數量的Samaphore、線程間交換數據的Exchange。接着介紹線程池原理,Executor框架。參考《java核心技術》,本文章還增加了關於Callable和Future、FutureTask的介紹,ThreadLocal、InheritableThreadLocal、阿里的線程池中父子線程變量的場地解決方案ThreadLocal Transmittable ThreadLocal(TTL)。本文的主要目的是簡單介紹java併發編程的整個架構,知道遇到併發編程的場景時知道解決問題的一個方向:
1、volatile、synchronized底層實現原理
2、java內存模型
3、線程的基本介紹及線程間的通信
4、鎖
5、併發容器和Fork/Join框架
6、原子操作類
7、併發工具
8、線程池
9、Callable和Future
10、ThreadLocal、InheritableThreadLocal、ThreadLocal Transmittable ThreadLocal(TTL)
11、Executor框架

1、volatile、synchronized底層實現原理
volatile是輕量級的synchronized,它在多處理器開發中保證了共享變量的的可見性,如下圖,線程1在覈心1中運行,讀取了共享變量a,當a是聲明爲volatile的時候,線程1將緩存行的a寫回內存時,會導致其他線程對應的緩存行的a爲無效值,需要重新讀取線程1寫內存後的a值。這便是volatile的可見性大概描述。
而synchronized用的鎖存在java對象頭中,對象頭中存在一個鎖狀態的標誌位,標誌位的不同值表明不同的鎖,鎖的狀態會進行升級。鎖的類型包括:偏向鎖、輕量級鎖、重量級鎖。鎖的升級根據鎖的競爭狀況進行升級,沒有鎖的降級。
CAS(Compare and Swap):比較並交換,輸入兩個數值,一箇舊值(期望操作前的值)和一個新值,在操作期間先比較舊值有沒有發生變化,如果沒有發生變化,才交換成新值,發生了變化則不交換。
圖1.1
2、java內存模型
3、線程的基本介紹及線程間的通信
4、鎖
5、併發容器和Fork/Join框架
6、原子操作類
7、併發工具
8、線程池
9、Callable和Future
10、ThreadLocal、InheritableThreadLocal、ThreadLocal Transmittable ThreadLocal(TTL)
11、Executor框架

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章