- Java并發編程深度解析與實戰
- 譚鋒(Mic)
- 1676字
- 2022-05-10 18:39:11
前言
筆者在以前的工作中很少使用并發編程,大部分應用場景都用一個線程池去異步執行一個任務,對線程的理解和研究確實不多。
2017年筆者創業的時候,從一名開發工程師轉成一名講師,當時的課程設計中包含并發編程這部分內容,因為在很多一二線互聯網公司的面試中,并發編程幾乎是必然會問的問題,而絕大部分學員對并發編程的理解也都停留在使用階段。
為了講好并發編程這塊內容,筆者不得不深入研究和學習,以便更好地輸出高質量的內容。從那以后,筆者買了市面上幾乎所有有關并發編程的書,通過搜索引擎查找了幾乎所有的并發編程學習資料,驚訝地發現并發編程這個領域知識體系非常龐大。同時,隨著對并發編程的深入研究,筆者發現里面有大量的設計思想(比如分而治之)非常值得學習和研究,這也使得筆者迷戀上了并發程序設計。
這4年來,筆者幾乎把核心組件的設計思想、源碼和原理全部細致地分析了一遍,收獲頗豐。筆者原本計劃在2019年時寫并發編程相關的書,把自己的收獲寫下來分享給讀者,但是當時感覺對并發編程的理解還不夠成熟,而且市面上有寫得非常不錯的書,筆者在課程中也強烈推薦過。
今年決定寫這本書,一方面是因為筆者認為自己對并發編程的理解已經足夠輸出一些有價值的內容,另一方面是因為從學員中了解到,市面上的相關圖書要么內容太松散,要么太高深,初學者看起來費勁,有經驗的讀者學起來又總覺得少了些什么。寫這本書應該是一個水到渠成的過程,筆者想彌補市面上這類書在編寫上的不足,同時想把這4年來對并發編程的理解和自己的并發程序設計經驗分享出來,讓各位讀者都能輕松地掌握晦澀難懂的并發編程知識。
另外,筆者在寫書之前,自認為對并發編程的理解足夠深刻,但是在整理成書的時候,還是有很多收獲,特別是當把一些復雜的內容轉換為圖形的時候,不僅僅需要理解當前技術,還需要更進一步地理解相關的理論基礎和關聯技術的原理。
本書涵蓋Java整個并發編程體系的核心庫和核心類的使用及原理分析,有六大特色。
特色一:每一個知識點都是以垂直化設計的方式進行分析和展開的,以synchronized關鍵字為例:
? 首先從并發編程的原子性問題引入,了解為什么需要synchronized及怎么使用synchronized。
? synchronized作為獨占鎖的實現必然存在互斥變量,所以深入講解了synchronized鎖的存儲原理。
? 接著從鎖存儲延展到Mark Word對象頭,以及從對象頭繼續延展到緩存行及其填充機制。
? 另外,從synchronized鎖的性能方面切入,了解鎖升級的實現及原理。
在很多技術類圖書中都存在這樣一個問題,就是對一些技術的分析只關注當前技術本身的廣度,對深度及關聯技術的說明不夠,導致很多讀者在閱讀的時候因為一個不明白的問題而影響對知識點的理解。
特色二:內容聚合度較高。針對一個技術點,縱向分析這個技術點的所有相關內容,并且對相關知識點進行了非常詳細的說明。讀者在閱讀的時候,不會因為對部分擴展知識不理解而導致對技術理解得不夠深刻。
特色三:站在架構實踐的角度來看待并發。本書對很多技術點的分析,都站在一個設計者的視角來展開。比如在線程池章節中,筆者會分析線程池的特性,以及如果自己來設計應該如何考慮和實現,這對開發者來說能夠開拓技術思維和提升技術高度。
特色四:大量的圖形設計簡化了對復雜技術的理解,平均每個章節的圖片數量在30張左右,非常有利于讀者對技術點的理解。
特色五:本書涵蓋的內容非常全面,并且由淺入深地進行遞進性的分析,讀者在學習的時候,能夠自然形成對并發編程的體系化積累。
特色六:考慮到很多讀者在實際工作中很少使用并發編程,本書涵蓋了大量實戰案例,可以幫助讀者理解各類技術在實際應用中的使用方法。
筆者花費了4年時間,雖然投入了大量精力對并發編程進行了深入的研究,但在寫這本書的時候,仍然有不少收獲。在寫作過程中,筆者希望把自己對并發編程的理解和收獲全部寫進來。當然,筆者也確實盡力這么做了,因此對各位讀者來說,這應該是一本非常值得閱讀的書。本書提供所有源碼,具體下載方式可以參考下方(或封底)的“讀者服務”。
由于并發編程體系涉及的技術面非常廣,書中難免會存在一些錯誤,懇請各位讀者在閱讀本書的時候,如果發現錯誤,及時反饋給出版社,筆者會及時糾正。
譚鋒(Mic)
2021年8月1日