並發編程之學習總結
前言
樓主自1月14號就停更了,這段時間一直在看JVM,因此沒有更新任何文章,但樓主覺得有必要總結一下之前學習並發的過程,因為這一次的總結其實就是下一次的開始。主要時總結一下並發的學習路線,因為在樓主的工作環境中,並不是每天都在編寫高並發的程序。然而,即使是這樣,我們也要知道並發的每個知識點,這樣才算一個合格的Java 程序員。那麽如何系統的學習並發呢?學習路線是怎麽樣的呢?
1. 學會開始就成功了一半
首先要確定的思想是:並發編程很復雜,不是看一兩篇博客就搞定的。樓主學習學習並發主要看了4本書:
- 《並發編程實戰》
- 《並發編程的藝術》
- 《Java 高並發程序設計》
- 《深入理解 Java 虛擬機》第五部分:高效並發
也就是上面的幾本書。還有一個建議就是,看書最好是看實體的,有什麽好處呢?好處就是,當你腦子裏有一個疑惑的時候,你能夠立馬翻書去驗證你的想法。而不是打開電子書,慢慢找。不過也有很多人喜歡電子書,畢竟地鐵上看書不方便。具體買什麽書可以根據自己的情況來。沒有最好的,只有最合適的。還有一個問題,就是,看書不一定是從頭到尾一字不漏的看,這和死讀書差不多。樓主的讀書經驗是:先快速的將全書過一遍,大概會花一天時間,再找到自己感興趣的點慢慢看,慢慢配合代碼驗證。這樣效率會高一點。而且理解的會更加深刻。這也算一個學習的方法吧。
那麽這四本書先看哪一個呢?樓主是先看的《Java 高並發程序設計》,國人寫的。相比較於其余的3本,通俗易懂。註意,看這本書的時候,一定要配合著書敲代碼。否則都是白瞎。
2. 逐漸深入
在看完了 《Java 高並發程序設計》 後和寫了一些 demo 後,我們應該會基本的並發編程了,知道如何使用 JDK 中的 API,也知道了一些基本的 Java 內存模型,一些關鍵字的理論。這個時候,我們僅僅是 How 的階段,也就是使用的階段。如果你是一個有追求的程序員,你肯定想深入了解並發中哪些奇怪的約定,奇怪的事情到底是如何發生的,那麽,就需要繼續讀書,寫代碼。
這個時候,就需要看看《並發編程的藝術》和《深入理解 Java 虛擬機》第五部分:高效並發,這兩本書,重點深入原理,配合 JVM 源碼和 匯編深入解釋並發的原理。讀起來酣暢淋漓。將之前的哪些困惑一掃而空。至於為什麽看兩本,因為每本書都不是完美的,那些寫書的作者的觀點也會不同,因此,我們需要知道的更多,並對比他們的看法,才能更加深入的形成自己的思維模型。不能只跟著一本書走。
這兩本書主要是理論,但請註意,其中的理論我們可以用代碼來驗證,才能更深刻的加深印象。
3. 深入源碼
在了解了原理之後,我們只是得到了理論知識,但很虛無,如果你是個好奇貓,那麽你肯定想知道這些設計是如何實現的。幸運的是,從 Java 源碼中,我們就能知道百分之90 了(剩下的在 HotSpot 源碼中)。這個時候我們做什麽呢?
硬肛!!!翻起我們之前寫的那些 demo,比如 new Thread(),new ConcurrentHashMap(),這些我們之前練習的 demo,配合我們的開發工具(強烈推薦 IDEA),鼠標左鍵 + ctrl,進入源碼查看如何實現。源碼重點在 java.util.concurrent 包下。這些都是並發大師 Doug Lea 的傑作。值得反復品味。當然,看源碼的時候,也可以順帶結合源碼看看之前的書。加深印象。
只有看懂了源碼,你才能說,你真正知道了原理。
在看源碼的過程中,有痛苦,有快樂,起碼樓主是這樣的。痛苦的是:很多奇怪的地方看不懂。快樂的是:那些奇怪的地方終於搞懂了。這就是編程的樂趣吧。像一個偵探,慢慢的解開所有的疑惑,最後找到真相。
為什麽說硬肛呢?從短期來說,看源碼處理滿足好奇心,並不能給你帶來什麽好處。如果看源碼不能給你帶來快樂,那麽,很快,你就會堅持不下去,但是,請註意:這是你進階高級 Java 程序員的一個標誌。
當然,不是所有的源碼都是要看的。這時候就體現出 demo 的重要性了,如果你之前沒有 demo,那麽你將無從下手。但是,如果你聽了樓主的:邊看書的同時也寫了demo,那麽這個時候,你就可以順著demo看源碼了,有什麽好處呢?好處就是:你從源碼層面了解了你使用的api的具體實現。從這個意義上說:你已經學會並發編程了。
也許,經過一到兩個月的閱讀源碼的過程,你對 JUC (java.util.concurrent)包下的 API 已經了如執掌,恭喜你,你終於學會了並發編程。不讀源碼,不足以談並發。
總結
通過上面的3個步驟,基本就能搞定 Java 並發編程,看這篇文章的你,可以算一下時間,樓主估算了一下,如果你是在職的,那麽你需要在工作之余完成這件事情,大概需要2個多月,當然這也要看你的 Java 基礎好不好了,這和平時的積累有很多關系。如果你是個天才,當樓主沒說。但大部分人都是凡人,都是靠著堅持和努力才能達到自己的目標。所以,請努力吧!
最後,當你看完了 JUC 的源碼,感覺還不過癮,HotSpot 的源碼等著你,夠你喝好久。因為樓主正在喝 HotSpot 的源碼。哈哈哈哈。
並發編程之學習總結