如何學(xué)習(xí)Java多線程

最近一段時間,我對《Java并發(fā)編程實踐》這本經(jīng)典而又有些難懂的書籍,嘗試用了一些簡單有趣牲迫、通俗易懂的方式進行解讀耐朴,現(xiàn)整理成GitBook(文末有鏈接),方便大家閱讀盹憎。

為什么要解讀這本書

因為這是一本經(jīng)典卻又難懂的書隔箍。

這本書的經(jīng)典我想不必多講了,幾乎所有想學(xué)習(xí)Java并發(fā)的同學(xué)脚乡,都會被推薦去看這本書(雖然他們中的大多數(shù)在看了不到三分之一之后就放棄了),作為一本書籍滨达,最重要的是系統(tǒng)性和準(zhǔn)確性奶稠,這本書涵蓋了Java并發(fā)中幾乎所有基礎(chǔ)知識點,并且大多數(shù)章節(jié)都配有實際案例捡遍,是一本非常值得收藏的Java并發(fā)參考手冊锌订。

那么為什么說這本書難懂呢?
總的來說有以下幾點:

  • 理論過多画株。舉個例子辆飘,書中第五章,在講Java并發(fā)的一些基礎(chǔ)構(gòu)建模塊時(ConcurrentHashMap谓传、CopyOnWriteArrayList蜈项、Future這些),前面用了很多篇幅講這些類的理論知識续挟,到章節(jié)最后才用一個實際案例將這些知識串起來紧卒,而很多讀者在看前面那些枯燥乏味的理論性講解時,就已經(jīng)消耗了太多意志力诗祸,導(dǎo)致最后根本沒精力看最后的案例跑芳;
  • 有點跳躍。書中對一些知識點的講解直颅,并沒有完全講透博个,有些只是一筆帶過,讀者看到難免就會心里好多個疑問功偿,然后就試圖通過上下文去理解作者的意思盆佣,最后又消耗了大量意志力,導(dǎo)致最終的棄讀脖含;
  • 中文翻譯別扭罪塔。這是很多經(jīng)典技術(shù)書籍的通病了,本身這本書就很難懂养葵,翻譯的別扭征堪,就更難懂了。

針對上面這些問題关拒,我采用了以下方式進行解讀:

  • 用講故事的方式進行講解佃蚜。讓文章兼具知識性和娛樂性庸娱,讓讀者閱讀時不會感到枯燥;
  • 先案例后理論谐算。我把書中放在章節(jié)最后的案例熟尉,挪到了文章的開頭,讓讀者先對知識有了大概的了解洲脂,同時引發(fā)讀者的好奇心斤儿,在看文章后面的偏理論解讀的時候,不會昏昏欲睡恐锦;
  • 不局限于書籍本身往果。和大多數(shù)讀者一樣,我在看這本書的時候一铅,也經(jīng)常會卡殼陕贮,然后翻尋上下文,依舊百思不得其解潘飘。這時候就需要用到搜索引擎了肮之,所以你經(jīng)常會在我的文章末尾看到除了《Java并發(fā)編程實踐》以外的其他參考文獻;
  • 必要時看原著卜录。上面說了戈擒,有些段落的中文翻譯實在看著別扭,這時候就需要看回原著艰毒,看看作者自己是如何表述的峦甩。

解讀脈絡(luò)

我這次解讀的內(nèi)容,也許只包含了Java并發(fā)中20%的知識现喳,但這20%的知識凯傲,已經(jīng)足以涵蓋平時80%的使用場景。下面簡單梳理一下這份解讀的脈絡(luò)嗦篱。

1冰单、為什么要使用線程池
首先,你學(xué)習(xí)Java多線程灸促,得知道為什么要使用多線程吧诫欠?干嘛不老老實實使用單線程呢?這部分比較簡單浴栽,書里講的也很清楚荒叼,網(wǎng)上一搜資料也一大把,所以這部分不作解讀 ( ̄ ̄)~

2典鸡、如何寫出線程不安全的代碼
好被廓,現(xiàn)在你知道為什么要學(xué)Java多線程了。
那么當(dāng)我們談學(xué)習(xí)多線程時萝玷,我們是在談學(xué)習(xí)什么呢嫁乘?談如何創(chuàng)建線程嗎昆婿?不是,多線程里的大多數(shù)知識蜓斧,都是在講如何在多線程的環(huán)境下仓蛆,保證代碼的線程安全性,所以挎春,接下來看疙,你要了解,如何寫出線程不安全的代碼直奋,知道什么樣的代碼是線程不安全的狼荞,你才會去想如何才能讓它線程安全。

3帮碰、兩個最基礎(chǔ)的關(guān)鍵字
現(xiàn)在你寫出了線程不安全的代碼,是時候想想要怎樣把它們變成線程安全的了拾积。
在Java中殉挽,實現(xiàn)線程安全,最最基礎(chǔ)的就是兩個關(guān)鍵字拓巧,volatilesynchronize斯碌。
volatile用的比較少,但是通過對它的學(xué)習(xí)肛度,你可以了解Java內(nèi)存模型傻唾,學(xué)會透過JVM去看線程問題,這是一個思考范式的提升Volatile趣談——我是怎么把貝克漢姆的進球弄丟的
synchronize承耿,無需多言冠骄,不管是我們自己寫的代碼,還是JDK里的各個線程安全類加袋,如ConcurrentHashMap凛辣,HashTable,大多都是利用synchronize來實現(xiàn)的線程安全:如何用一句話介紹synchronize的內(nèi)涵

4职烧、學(xué)會委托
學(xué)會了volatile和synchronize扁誓,以后就可以靠著兩兄弟打遍天下無敵手了?
理論上可行蚀之,不過就像那句話說的蝗敢,拿著錘子的人,看誰都是釘子足删。要想建一棟大樓寿谴,我們不能只有錘子,我們還需要起重機失受。Java就給了我們很多牛哄哄的起重機拭卿,比如ConcurrentHashMap骡湖,想想看,每次你想讓你的Map線程安全峻厚,都要自己手動加上synchronize响蕴,這多麻煩,有了ConcurrentHashMap惠桃,我們只要把線程安全的重任浦夷,委托給它去實現(xiàn)就ok了。
Java中可以被委托的類還有很多辜王,大體上分為三類劈狐,同步容器、并發(fā)容器和同步工具類呐馆,我的解讀肥缔,也是通過一個簡單的緩存案例,展示了如何把一個原本線程不安全的代碼汹来,通過synchronize改為線程安全续膳,再通過委托,強化為性能更猛的緩存器:Java趣談——如何構(gòu)建一個高效且可伸縮的緩存

5收班、學(xué)點內(nèi)功——線程池
現(xiàn)在你已經(jīng)掌握了極強的外功了坟岔,十八般武藝樣樣精通,可以去武林大會挑戰(zhàn)武林盟主了嗎摔桦?還不行社付,光有極強的外功,卻沒有與之匹配的內(nèi)功邻耕,只會讓你走火入魔鸥咖。
Java多線程也是如此,上面講的都是外功兄世,教你如何使用各種工具實現(xiàn)線程安全扛或,但是想想看,實際項目中碘饼,你真的可以每個任務(wù)過來都給它創(chuàng)建一條線程嗎熙兔?肯定不行嘛,內(nèi)存會撐爆的艾恼!所以住涉,你還需要掌握一項管控線程數(shù)量的技術(shù)——線程池,我將通過一個Web服務(wù)器的案例钠绍,給你展示為什么要使用線程池以及如何將無線程數(shù)量管控的代碼改為由線程池管控的代碼:Java趣談——如何像Tomcat一樣處理請求
另外舆声,我還將從Java并發(fā)大師Doug Lea的視角,帶你了解Java線程池背后的原理:Java線程池是如何誕生的?

6媳握、學(xué)點設(shè)計——并發(fā)方案
學(xué)會了外功碱屁,又掌握了內(nèi)功,可以上江湖闖蕩了嗎蛾找?等等娩脾,還有一點,你要知道什么才是你應(yīng)該出手的時機打毛,你總不能一上來就放大招殺敵一千自損四百吧柿赊。Java并發(fā)也是如此,你要知道幻枉,在什么情況下碰声,應(yīng)該對任務(wù)進行并行化處理,以及哪種情況下并行處理效果更好熬甫,我用了一個頁面渲染器的案例胰挑,給你展示了,如何對并發(fā)方案進行設(shè)計和優(yōu)化:Java趣談——如何寫出一個高效的頁面渲染器

以上就是我對《Java并發(fā)編程實踐》中椿肩,足以解決你80%的并發(fā)問題的20%知識的解讀瞻颂,其他沒有解讀的包括:

  • 如何取消和關(guān)閉線程
  • 如何避免線程的活躍性風(fēng)險
  • 如何提升性能和可伸縮性
  • 如何測試并發(fā)程序
  • 顯示鎖及其原理
  • 如何自定義同步工具
  • 原子變量及其原理
  • 非阻塞算法及其原理

難道這些知識不重要嗎?并不是覆旱,只是我還沒細(xì)看解讀不了罷了 (〃''〃)
那不掌握這些知識,可以出山了嗎核无?可以扣唱,只要你把《Java并發(fā)編程實踐》這本書放在桌子旁邊,知道有問題要去看哪部分就可以了团南,比如你寫了一個并發(fā)程序噪沙,想測試一下,卻不知道從何入手吐根,翻開書,看索引,第12章愧口,并發(fā)程序的測試气嫁,看,學(xué)冗疮,學(xué)以致用萄唇,就ok了。

當(dāng)然术幔,我的解讀只是為了幫助大家更好的理解書中的將的知識另萤,所以對于我解讀過的章節(jié),大家如果想深入學(xué)習(xí),還是要翻開書四敞,研究一番的泛源,只不過在看了我的解讀之后,你理解起來會更輕松忿危,學(xué)習(xí)起來會更有目的性达箍,效率會更高。

為了方便大家閱讀癌蚁。我把我的解讀都整理到一份GitBook里頭幻梯,后續(xù)有新的文章也會加在里面:
Java Concurrency in Practice(SexyCode解讀版)

其他推薦書籍

不管什么領(lǐng)域,要想全面的學(xué)習(xí)一項技術(shù)努释,光看一本書都是不夠的碘梢。
如果說學(xué)習(xí)《Java并發(fā)編程實踐》這本權(quán)威經(jīng)典之作,是給自己搭建了一個Java多線程的知識框架的話伐蒂,那么看其他作者寫的同主題的書煞躬,就是主動的尋求對已有框架的進一步驗證和沖擊

那么還有什么Java多線程書值得去看一看呢逸邦?
《Java并發(fā)編程實踐》中恩沛,用的是常規(guī)的視角來講Java多線程的,所謂常規(guī)缕减,就是由淺到深雷客,層層遞進。而我們也可以換一個視角桥狡,比如用設(shè)計模式的視角來學(xué)習(xí)搅裙。用這個視角來講Java多線程的開山鼻祖,應(yīng)該是Doug Lea的Concurrent Programming in Java - Design Principles and Pattern 裹芝,不過老人家畢竟水平太高部逮,寫的文章一般人看不懂,所以就有了日本人寫的圖解Java多線程設(shè)計模式嫂易,以及我們中國人寫的Java多線程編程實戰(zhàn)指南(設(shè)計模式篇)兄朋,大家可以選擇其中一本進行學(xué)習(xí),從一個不一樣的視角怜械,看待Java多線程颅和。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市缕允,隨后出現(xiàn)的幾起案子融虽,更是在濱河造成了極大的恐慌,老刑警劉巖灼芭,帶你破解...
    沈念sama閱讀 206,126評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件有额,死亡現(xiàn)場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機巍佑,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,254評論 2 382
  • 文/潘曉璐 我一進店門茴迁,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人萤衰,你說我怎么就攤上這事堕义。” “怎么了脆栋?”我有些...
    開封第一講書人閱讀 152,445評論 0 341
  • 文/不壞的土叔 我叫張陵倦卖,是天一觀的道長。 經(jīng)常有香客問我椿争,道長怕膛,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,185評論 1 278
  • 正文 為了忘掉前任秦踪,我火速辦了婚禮褐捻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘椅邓。我一直安慰自己柠逞,他們只是感情好,可當(dāng)我...
    茶點故事閱讀 64,178評論 5 371
  • 文/花漫 我一把揭開白布景馁。 她就那樣靜靜地躺著板壮,像睡著了一般。 火紅的嫁衣襯著肌膚如雪合住。 梳的紋絲不亂的頭發(fā)上绰精,一...
    開封第一講書人閱讀 48,970評論 1 284
  • 那天,我揣著相機與錄音聊疲,去河邊找鬼茬底。 笑死沪悲,一個胖子當(dāng)著我的面吹牛获洲,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播殿如,決...
    沈念sama閱讀 38,276評論 3 399
  • 文/蒼蘭香墨 我猛地睜開眼贡珊,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了涉馁?” 一聲冷哼從身側(cè)響起门岔,我...
    開封第一講書人閱讀 36,927評論 0 259
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎烤送,沒想到半個月后寒随,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,400評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 35,883評論 2 323
  • 正文 我和宋清朗相戀三年妻往,在試婚紗的時候發(fā)現(xiàn)自己被綠了互艾。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 37,997評論 1 333
  • 序言:一個原本活蹦亂跳的男人離奇死亡讯泣,死狀恐怖纫普,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情好渠,我是刑警寧澤昨稼,帶...
    沈念sama閱讀 33,646評論 4 322
  • 正文 年R本政府宣布,位于F島的核電站拳锚,受9級特大地震影響假栓,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜晌畅,卻給世界環(huán)境...
    茶點故事閱讀 39,213評論 3 307
  • 文/蒙蒙 一但指、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧抗楔,春花似錦棋凳、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,204評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至入热,卻和暖如春拍棕,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背勺良。 一陣腳步聲響...
    開封第一講書人閱讀 31,423評論 1 260
  • 我被黑心中介騙來泰國打工绰播, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人尚困。 一個月前我還...
    沈念sama閱讀 45,423評論 2 352
  • 正文 我出身青樓蠢箩,卻偏偏與公主長得像,于是被迫代替她去往敵國和親事甜。 傳聞我的和親對象是個殘疾皇子谬泌,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,722評論 2 345

推薦閱讀更多精彩內(nèi)容