如何高效地閱讀JDK源碼

這篇文章將為大家詳細(xì)講解有關(guān)如何高效地閱讀JDK源碼,小編覺得挺實用的,因此分享給大家做個參考,希望大家閱讀完這篇文章后可以有所收獲。

安仁網(wǎng)站制作公司哪家好,找創(chuàng)新互聯(lián)!從網(wǎng)頁設(shè)計、網(wǎng)站建設(shè)、微信開發(fā)、APP開發(fā)、響應(yīng)式網(wǎng)站開發(fā)等網(wǎng)站項目制作,到程序開發(fā),運營維護。創(chuàng)新互聯(lián)于2013年開始到現(xiàn)在10年的時間,我們擁有了豐富的建站經(jīng)驗和運維經(jīng)驗,來保證我們的工作的順利進行。專注于網(wǎng)站建設(shè)就選創(chuàng)新互聯(lián)。

為什么要看JDK源碼

一,JDK源碼是其它所有源碼的基礎(chǔ),看懂了JDK源碼再看其它的源碼會達(dá)到事半功倍的效果。

二,JDK源碼中包含大量的數(shù)據(jù)結(jié)構(gòu)知識,是學(xué)習(xí)數(shù)據(jù)結(jié)構(gòu)很好的資料,比如,鏈表、隊列、散列表、紅黑樹、跳表、桶、堆、雙端隊列等。

三、JDK源碼中包含大量的設(shè)計模式,是學(xué)習(xí)設(shè)計模式很好的資料,比如,適配器模式、模板方法模式、裝飾器模式、迭代器模式、代理模式、工廠模式、命令模式、狀態(tài)模式等。

三,JDK源碼中包含大量Java的高階知識,比如弱引用、Unsafe、CAS、鎖原理、偽共享等,不看源碼是很難學(xué)會這些知識的。

四,面試時更好地收割offer,這可能是很多同學(xué)最初的想法,其實真正看多了源碼,這一點可能并不是太重要了,因為你會發(fā)現(xiàn)更廣闊的世界。

五,彤哥認(rèn)為最重要的,閱讀源碼是對思維的一種鍛煉,是學(xué)習(xí)優(yōu)秀設(shè)計的最佳途徑,本文來源于工從號彤哥讀源碼。

JDK源碼的閱讀順序

首先,JDK源碼我分成了以下幾個部分:

基礎(chǔ)類

基礎(chǔ)類,是指組成JDK源碼地基的一部分類。

比如包裝類、反射類、工具類等,這些類有個共同點,就是代碼邏輯相對簡單,不存在數(shù)據(jù)結(jié)構(gòu)、復(fù)雜運算等問題。

對于基礎(chǔ)類,彤哥的建議是自己從頭到尾瀏覽一遍,對于看不懂的地方可以寫測試用例或者上網(wǎng)查查資料。比如,Integer里面有個IntegerCache內(nèi)部類你可能不知道干嘛的,這時候光看代碼是沒用的,只能上網(wǎng)查查資料了,也不能盲目地死磕。

簡單集合

簡單集合,是指不存在多線程安全問題的集合。

這部分集合一般用在單線程中,或者方法體中,但是他們用到了很多的數(shù)據(jù)結(jié)構(gòu),所以需要一定的數(shù)據(jù)結(jié)構(gòu)知識。

對于簡單集合,彤哥的建議是先弄明白底層的數(shù)據(jù)結(jié)構(gòu)知識,再去看源碼,這樣可能會輕松一些。當(dāng)然,彤哥后面也會出數(shù)據(jù)結(jié)構(gòu)系列的。

原子類

原子類,是指在多線程環(huán)境下能夠保證原子性的類。

這部分類主要包括Atomic*開頭和*Adder結(jié)尾的類,位于juc下面的atomic包中。

對于原子類,彤哥的建議是先去了解底層的Unsafe、CAS、偽共享等概念,再去看最簡單的AtomicInteger,最后再看LongAdder這種復(fù)雜的類。其中,斷點調(diào)試是不可或缺的手段。

說句實話,LongAdder這個類能學(xué)到很多高階的知識,非常推薦把這個類研究透徹,后面再去看Disruptor、Netty等源碼會事半功倍。

同步器

同步器,是指為了控制多個線程的競爭關(guān)系而存在的類或者關(guān)鍵字等,本文來源于工從號彤哥讀源碼,它們可以說是Java中最重要的內(nèi)容,沒有它們就無法控制多線程的正常運轉(zhuǎn)。

這部分內(nèi)容主要包括synchronized關(guān)鍵字、volatile關(guān)鍵字、重入鎖、讀寫鎖、倒計時器、信號量、回環(huán)柵欄、階段器、分布式鎖的實現(xiàn)等等。

對于同步器,彤哥的建議是先了解內(nèi)存模型、可見性、原子性、有序性、Happens-Before等基本概念,再嘗試閱讀這部分的源碼,最后再歸納出屬于你自己理解的“同步器的原理”。

并發(fā)集合

并發(fā)集合,是指多線程環(huán)境下能夠保證數(shù)據(jù)一致性的集合。

這部分集合主要是運用在多線程環(huán)境下,只有極個別類牽涉到高級的數(shù)據(jù)結(jié)構(gòu),更多的是鎖、CAS、volatile、自旋等高階技巧的運用。

對于并發(fā)集合,彤哥的建議有三點:

  • 一定要在同步器之后閱讀

  • 數(shù)據(jù)結(jié)構(gòu)先搞透,比如ConcurrentSkipList

  • 利用IDEA的Thread級別的斷點,不斷調(diào)試,不斷調(diào)試,不斷調(diào)試

線程(池)類

線程(池)類,是指跟線程和線程池相關(guān)的類。

這部分類主要包含Thread、ThreadLocal、三種線程池等。

對于線程(池)類,彤哥的建議是先從整體上把握,再分成幾個塊來看,看哪塊的東西就只看那塊的東西,不要管其它的代碼,即要搞清楚你的重點在哪里,比如,看線程運行的流程就不要管狀態(tài)的事,凡是牽涉到狀態(tài)的代碼全部跳過,反之亦然,都看完了,再串一起看。

IO/NIO類

IO類,是指跟輸入輸出流相關(guān)的類,這部分類主要包括文件操作相關(guān)的類以及網(wǎng)絡(luò)IO相關(guān)的類。

對于IO類,彤哥的建議是簡單瀏覽,做到心里有數(shù)即可,用到的時候再去查都可以。

但是對于nio相關(guān)的類,還是要好好研究的,這部分類我們放在Netty源碼閱讀的相關(guān)章節(jié)中一起學(xué)習(xí)。

其它類

其它類,工作中遇到了可以點進去看看,但是不建議抽出時間單獨去研究,比如,時間類、awt類,看的必要性不是很大。

JDK源碼的閱讀方法

一,設(shè)定目標(biāo),目標(biāo)越明確越好,不要設(shè)定得過于虛無縹緲。比如,熟悉HashMap的數(shù)據(jù)結(jié)構(gòu),這就是一個很明確的目標(biāo);再比如,看懂HashMap的源碼,這就很縹緲了。

二,嘗試自己提出問題,先自己根據(jù)某個知識點發(fā)散提出問題。比如,關(guān)于HashMap你能想到哪些知識點,這部分可以借助思維導(dǎo)圖無限想象,后面有機會彤哥給大家分享一下思維導(dǎo)圖聯(lián)想法。

三,嘗試網(wǎng)絡(luò)查詢問題,打開度娘,輸入你要學(xué)習(xí)的知識點,把前面幾頁統(tǒng)統(tǒng)點開,看看別人都遇到了哪些問題,當(dāng)然,能力強的同學(xué)也可以使用Google,這部分查詢出來的問題也可以補充到你的思維導(dǎo)圖中去。

四,嘗試閱讀源碼,對于上面的問題,一個一個嘗試去源碼中尋找答案,由點及面,最后再總結(jié)整個大的知識點。

五,不斷發(fā)現(xiàn)問題,在閱讀源碼的過程中可能又會發(fā)現(xiàn)新的問題,先跳過去,而是把它加到思維導(dǎo)圖中,等當(dāng)前的問題解決完了再去解決。

六,專注你的問題,在閱讀源碼的時候一定要專注于你當(dāng)前的問題,不要受其它問題的干擾,比如看線程池任務(wù)執(zhí)行的流程,你就不要管線程池狀態(tài)的事情。

七,多做比較,橫向比較和縱向比較,從多維度去比較,本文來源于工從號彤哥讀源碼。

八,多做實驗,多多利用IDE的調(diào)試模式,不斷修改斷點,不斷調(diào)試。

九,多與人交流,如果條件允許的話,多與周邊的人一起交流,當(dāng)然,也可以來騷擾彤哥。

十,多做總結(jié),對于自己解決的問題,一定要學(xué)會總結(jié),多做學(xué)習(xí)筆記,當(dāng)然,也歡迎來彤哥這里投稿。

十一,耐心&堅持,閱讀源碼是一件非常枯燥而且枯燥的事情,一定要堅持堅持堅持。

關(guān)于“如何高效地閱讀JDK源碼”這篇文章就分享到這里了,希望以上內(nèi)容可以對大家有一定的幫助,使各位可以學(xué)到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

名稱欄目:如何高效地閱讀JDK源碼
文章路徑:http://bm7419.com/article14/psspge.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供動態(tài)網(wǎng)站、品牌網(wǎng)站設(shè)計自適應(yīng)網(wǎng)站、品牌網(wǎng)站制作商城網(wǎng)站、云服務(wù)器

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

h5響應(yīng)式網(wǎng)站建設(shè)