前言
所謂并發編程是指在一臺處理器上“同時”處理多個任務,并發是在同一物體上的多個事件,多個事件在同一時間間隔發生,一直覺得并發編程是所有后臺工程師的基本功,學習Java的并發工具,對整體的并發理解乃至分布式都有一定的提高,所以想和大家分享一下,
Java并發編程的藝術
我一開始直接上手JCIP(Java Concurrency in Practice)發現把握不了那本書的主線,所以思索著從國內的作者開始先,便讀了下方騰飛的《Java并發編程的藝術》,這本書對于構建Java并發的整體映像是有所提高的,至少我知道了有哪些東西要深入學習,




本書結合JDK的原始碼介紹了Java并發框架、執行緒池的實作原理,幫助讀者做到知其所以然,本書對原理的剖析不僅僅局限于Java層面,而是深入到JVM,甚至CPU層面來進行講解,幫助讀者從更底層看并發技術,本書結合線上應用,給出了一些并發編程實戰技巧,以及線上處理并發問題的步驟和思路,
The Art of Multiprocessor Programming
接著我想加強下并發的理論,繼續讀了The Art of Multiprocessor Programming,這本書只有英文原版讀起來有些艱難,但是過一遍還是好處多多,建議初學者了解下概念,后期可以再來翻看,

The Art of Multiprocessor Programming

This book is intended to serve both as a textbook for a senior-level undergraduate course, and as a reference for practitioners.
JCIP(Java并發編程實踐)
有了以上兩步的支持,接下來就又開始啃JCIP了,發現比以前有了不同的感覺,我能比較輕松地跟上書的脈絡,知道書的整體框架,讀起來不那么費勁了,這本書號稱Java并發編程的圣經,確實可以看出作者有很豐富的并發實踐經驗,





JCIP一書的整體脈絡如下:
- 介紹多執行緒的利弊;
- 解釋執行緒安全是什么以及如何獲得執行緒安全;
- 從高頻的使用場景出發,介紹物件傳遞,類的設計等如何獲得執行緒安全;
- 從Java并發包出發,介紹高層的并發組件有啥以及相關原理;
- 介紹并發的一些弊端以及如何避免;
- 從Java并發包出發,介紹底層的并發組件以及原理;
總體看,該書有兩條主線,1 從高到低介紹Java并發包的一些重要組件和原理; 2 從并發場景出發,介紹如何利用這些組件來獲得執行緒安全,其中第二部分是這本書最大的特色,也是書名中有Practice的原因,
所有Java并發編程書籍已整理PDF,并附有知識圖譜學習路線,需要完整版的朋友,可以以下方式來獲取!!!

七周七并發模型
到了這一步,接下來怎么繼續提高呢?我發現了一本很有趣的書,《七周七并發模型》,之前的視野一直是在Java并發編程的工具包中深入了解,感覺應該跳出來,從模型的角度看看各個語言的并發實作的原理,我目前正處于這一步,發現很有意思,第一章講Java的執行緒和鎖這個模型就感覺很精髓,只用了小三章把Java整體的脈絡過了一遍,強烈推薦用來復習,


有了Java并發的基礎知識,接下來很適合閱讀七周七并發,我目前就在讀七周七并發,發現站在多種語言從范式的角度了解并發很有意思,原來Java提供的執行緒和鎖的機制其實相當于比較原始的工具了,其離底層最近,最近接觸了Scala,其使用了AKKA,則是一種高層的并發抽象,
七周七并發試圖從歷史的角度闡述作為鎖和執行緒的代表之Java的并發包的進化歷程,首先最早加入JDK的,其實是synchronized及其statement,但是發現缺少相關timeout和不能中斷等等功能,加入了可重入鎖,讀寫鎖等等,再后來又加入了各種執行緒安全的資料結構和高級同步機制,
接下來,七周七并發從函式式編程等等各種范式的角度闡述,除了執行緒和鎖,還有很多其他高層抽象可以更加方便地撰寫并發代碼,
這本書對于充分理解并發,拓寬視野很有幫助,推薦大家閱讀,
深入理解Java虛擬機
最近又看了《深入理解Java虛擬機》中的并發部分,發現理解的又有變化,



Java語言和虛擬機提供了原生的、完善的多執行緒支持,使得它天生就適合開發多執行緒并發的應用程式,不過我們不能期望系統來完成所有與并發相關的處理,了解并發的內幕也是一個高級程式員不可缺少的課程,
知識圖譜學習路線
以下是我根據自己的學習經歷整理了下Java并發編程知識圖譜的最新版本以及書籍學習路線:
Java并發編程知識圖譜

Java并發編程學習路線

這5本Java并發編程書籍PDF和2張知識圖譜學習路線,需要完整版的朋友,可以以下方式來獲取!!!


最后
值得強調的一點是,在做技術選擇的時候,并發只是工具箱中的一種手段,學習它只是為了能夠靈活運用,設計的首要選擇依然是在當時情境下的最簡化,能不用并發就不要用,
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/195405.html
標籤:其他
