如何評價《Java 並發編程藝術》這本書?


對於書評這件事情,我其實是不想寫的,因為每個人都有自己的一個衡量標准,每個人眼中都有自己的哈姆雷特,是好是壞每個人都褒貶不一。如果對於書中的知識你都掌握了,你只是想把它作為一種知識串聯的記憶體的話,那么你可能感興趣的事整本書的知識框架和體系脈絡,所以如果書中的知識具有連貫性,能夠在你腦海中編織出你想要的記憶藍圖,那么我相信它對你來說就沒那么好;如果你想把它作為打開新世界的大門,你想了解一下並發編程的奧妙,我相信它對你來說也是一本好書,能夠拓展你的知識深度;如果你是面向面試來看它,它也是一本好書,因為絕大多數知識都是面試的常考點。

下面我會從上面的幾個假如來帶你過一遍這本書。

前置知識

首先先來混個臉熟,我相信大家都不陌生了,上書!!!

首先,這本書是由三個人撰寫的,這三位都是阿里人,我用一幅圖來說明這三個人都寫了哪些內容。

如果是由三個人合力撰寫的一本書,如果不能做到對書整體脈絡有把控的話,就會陷入聾子聽啞巴說瞎子看見鬼了這種邏輯上不能自洽的局面,但是我能從書中看出來,出版社和方老師在對整體知識體系的脈絡上面做到了嚴格把控,但我認為還是差點。

謹言慎行,我會盡量做到以極其客觀的角度來解讀這本書

首先第一章並發編程的挑戰這個立意非常不錯,把整本書所講的主要內容先引出來,使讀者大致了解一下並發編程都會帶來哪些問題,然后切入並發編程的痛點,即並發編程的性能瓶頸。

然后第二章直接深入 Java 並發機制的底層實現,這一章的內容和深度我認為有待商榷,但是如果從精讀的角度來看,這並沒有什么不妥,同時也會對那些"有一定 Java 並發編程基礎,想要更深層次了解 Java 並發底層實現"的同學來說,很容易眼前一亮。但是對那些"還沒接觸過並發編程,只想要了解一下 Java 並發"的同學來說,這第二章直接勸退了,說實話我在剛開始的時候接觸這本書,看到第二章我直接墊顯示器了。

所以這就是一個選擇的問題,這個問題深層次的拷問就是:你到底想給什么樣的讀者呈現什么樣的內容

然后我們假定第一種情況,即"有一定 Java 並發編程基礎,想要更深層次了解 Java 並發底層實現"的這類同學,這類同學看到這里我相信會直接喊出 yyds 這個詞,因為這一章真的非常驚艷,能夠寫出這樣的內容得益於方老師百年如一日的堅持和長期在一線打拼的知識積累。第一章和第二章的銜接就像是你剛學會了 1 + 1 = 1,然后就讓你論證為什么 1 + 1 = 1 ?

社死了有木有???????

第二章直接帶我們上難度,從 volatile 講到 synchronized ,從對象頭講到鎖的升級降級(撤銷),從 CAS 講到 ABA,從原子操作講到內存屏障,我直呼好家伙!非常驚艷。

但是,第二章對於一些細節的打磨還是差了一些,比如說在鎖升級這塊的流程圖就畫的不是那么顯而易見,反正我是看了圖,然后結合了大量網上的參考才看的略知一二。還有就是方老師上來直接講應用和底層原理,都沒有前戲的嗎???volatile 是什么,怎么我認為也應該從一個簡單的小例子引出來吧。

然后第三章,切換選手,上來直接全程硬菜,這一章從內存模型入手,講了 volatile 、final、synchronized 的內存語意,as-if-serial 和 happens-before 原則,Java 內存模型是怎樣的以及 JSR-133 對內存模型做了哪些改變,可以說能介紹的都介紹完了。

但是,我又要說但是了,這一章有一些內容應該是從外文網站上翻譯出來的,很多地方有些生硬,感覺像是堆砌,不像是在講課。這種講解風格我認為不如方老師講的犀利,能夠直接切入重點。這一章我剛開始看的還行,但是到了這一章后半程,明顯感覺吃力,不知道是我菜還是怎么着,看着看和明顯犯困,不知道手機/電腦前的小伙伴們怎么認為的。

擼完第三章,再看第四章,就感覺有點虐小號的意思,為什么 Java 並發編程基礎放在第四章講??????為什么基礎要放在底層實現的后面??????這不是本末倒置嗎?如果你是先看目錄直接從第四章看起來的倒還好,如果你從第一章慢慢慢慢看到第四章,你很可能會懷疑人生,這是什么破玩意?真的沒有搞明白為什么基礎要放在第四章才開始講。而且第四章這部分內容很多都是一帶而過,讓我不得不懷疑這位選手應該沒怎么寫過文章,我身邊這些公眾號主,但凡做的好的,有一些流量的原創號主,都不可能把文章寫成這樣,大量的代碼堆砌,講解一帶而過,這着實沒什么用,真的建議作者把《Java並發編程實踐》再好好讀一讀。

看到第五章,我終於明白了沒有點 Java 並發基礎的話,最好不要看這本書,因為很容易頭大。

第六章到第十一章其實講解的有些過於基礎了,如果說這本書是想要帶讀者深入理解並發的話,書中並沒有涉及很多源碼,但是對於那些"還沒接觸過並發編程,只想要了解一下 Java 並發"的同學來說,卻是一個了解 Java 並發一個比較好的工具書和參考書,對於那些希望面試背題的同學來說也是一樣的。

面試的時候一般會分為個階段來問:

  • 你知道 xxx 嗎?你用過 xxx 嗎?(一問看你有沒有接觸過,一般沒接觸過就不會問這個方向了)
  • 你在日常開發的過程中是如何使用 xxx 的呢?(再次判斷你有沒有接觸過,如果你能回答上來應用場景,才會繼續向下問,不然面試官就認為你在扯皮)
  • 那你知道 xxx 的原理嗎?(問你原理就是判斷你私下來有沒有研究過這個東西,可以回答 xxx 的工作機制是怎樣的,比如線程池的原理,你就可以回答線程池的工作機制)
  • 最后還可能會問你更細一些的問題,比如 HashMap 的 put 過程是怎樣的?(這個就需要熟悉源碼了)

所以,這本書給大家帶來的知識點僅局限於前三點,事實上,從整個行業上來說,我也沒有看到哪位作者把源碼擼出來寫成一本書的,所以這也是我們程序員們努力的方向。

這里,給讀者朋友們推薦一下我寫的關於並發方面的文章:

2w字 + 40張圖帶你參透並發編程!

我工作三年了,該懂並發了(干貨)

Atomic XXX 原理解析

一文搞懂 CountDownLatch 用法和源碼!

呵,Semaphore ,就這?

我真不想學 happens - before 了!

cxuan 連這 10 個問題都不會...

synchronized 的超多干貨!

volatile

肝完這篇線程池,我咳血了

有解釋,有源碼,有案例,是不是要來學習一波

為什么說這本書好?

所以,為什么說這本書好呢?

因為這本書符合我們中國人的調性,畢竟是出自中國人之手,這本書不同於《Java 並發編程實戰》,Java 並發編程實戰更多注重的是"如何編寫一手優秀的並發代碼",而 《Java 並發編程的藝術》更多的是圍繞 Java 底層知識來講解的,他們的側重點不同。並發編程實戰畢竟是外國人寫的,它經過翻譯的過程會損失掉一些原書的魅力,所以大家盡量還是要看原版書,最好不要穿二手鞋

Java 並發編程的藝術還好在比較貼合現如今的面試氛圍,大家知道現在面試就是各種八股文一股腦直接沖,這種面試造火箭的面試方式我們大家都嗤之以鼻,但是又無力改變這種現狀,所以只能適應,而這本書就是一個讓你更好適應八股文面試的一本書。我上面說,這本書有幾個章節講的還是比較不錯的,這幾個章節搞懂了,基本上相關面試你十拿九穩。但是后面有一些章節比較淺顯,需要貼合網上的博客再詳細了解。

為什么說這本書不好?

為什么說這本書不好?

我不認可這本書的敘述方式和體系結構,很容易把人給勸退。我認為這是需要反思的一點。

而且阿里的同學作為業界尤其是 Java 技術棧的頂級程序員,如果不能把自己的技術棧和知識體系的完備性作為最高標准要求自己,那么我們普通程序員還能夠相信誰呢?

這本書讓我有一種能夠離開它但卻離不開它的一種感覺。我看《深入理解 Java 虛擬機》的時候,就沒有這種情愫。因為看完周老師的深入理解 JVM 之后,我甚至覺得 《Java 虛擬機規范》你就完全可以扔在一邊了。

但是,《Java 並發編程實戰》和 《Java 並發編程藝術》其實是一種互補品,缺少哪一本書的知識,我都覺得少點東西。但是只看 Java 並發編程藝術這一本書又不夠,所以。。。。。。為什么不再認真打磨一下呢?

所以,希望還能有下一版的《Java 並發編程藝術》,讓我們大家一起期待。

文章的最后,給大家推薦一個 github ,https://github.com/crisxuan/bestJavaer 這個 github 是我嘔心瀝血所有文章的匯總,歡迎 star 。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM