1. 程式人生 > >作為一個java初學者,改如何學習多執行緒?

作為一個java初學者,改如何學習多執行緒?

多執行緒相對於其他 Java 知識點來講,有一定的學習門檻,並且瞭解起來比較費勁。在平時工作中如若使用不當會出現資料錯亂、執行效率低(還不如單執行緒去執行)或者死鎖程式掛掉等等問題,所以掌握瞭解多執行緒至關重要。

1、為什麼要使用多執行緒

首先,你學習Java多執行緒,得知道為什麼要使用多執行緒吧?幹嘛不老老實實使用單執行緒呢?這部分比較簡單,書裡講的也很清楚,網上一搜資料也一大把,所以這部分不作解讀 ( ̄ ̄)~

2、如何寫出執行緒不安全的程式碼

好,現在你知道為什麼要學Java多執行緒了。

那麼當我們談學習多執行緒時,我們是在談學習什麼呢?談如何建立執行緒嗎?不是,多執行緒裡的大多數知識,都是在講如何在多執行緒的環境下,保證程式碼的執行緒安全性

,所以,接下來,你要了解,如何寫出執行緒不安全的程式碼,知道什麼樣的程式碼是執行緒不安全的,你才會去想如何才能讓它執行緒安全。

3、兩個最基礎的關鍵字

現在你寫出了執行緒不安全的程式碼,是時候想想要怎樣把它們變成執行緒安全的了。

在Java中,實現執行緒安全,最最基礎的就是兩個關鍵字,volatilesynchronize

volatile用的比較少,但是通過對它的學習,你可以瞭解Java記憶體模型,學會透過JVM去看執行緒問題,這是一個思考正規化的提升: Volatile趣談——我是怎麼把貝克漢姆的進球弄丟的

synchronize,無需多言,不管是我們自己寫的程式碼,還是JDK裡的各個執行緒安全類,如ConcurrentHashMap,HashTable,大多都是利用synchronize來實現的執行緒安全:如何用一句話介紹synchronize的內涵

4、學會委託

學會了volatile和synchronize,以後就可以靠著兩兄弟打遍天下無敵手了?

理論上可行,不過就像那句話說的,拿著錘子的人,看誰都是釘子。要想建一棟大樓,我們不能只有錘子,我們還需要起重機。Java就給了我們很多牛哄哄的起重機,比如ConcurrentHashMap,想想看,每次你想讓你的Map執行緒安全,都要自己手動加上synchronize,這多麻煩,有了ConcurrentHashMap,我們只要把執行緒安全的重任,委託給它去實現就ok了。

Java中可以被委託的類還有很多,大體上分為三類,同步容器、併發容器和同步工具類,我的解讀,也是通過一個簡單的快取案例,展示瞭如何把一個原本執行緒不安全的程式碼,通過synchronize改為執行緒安全,再通過委託,強化為效能更猛的快取器:Java趣談——如何構建一個高效且可伸縮的快取

5、學點內功——執行緒池

現在你已經掌握了極強的外功了,十八般武藝樣樣精通,可以去武林大會挑戰武林盟主了嗎?還不行,光有極強的外功,卻沒有與之匹配的內功,只會讓你走火入魔。

Java多執行緒也是如此,上面講的都是外功,教你如何使用各種工具實現執行緒安全,但是想想看,實際專案中,你真的可以每個任務過來都給它建立一條執行緒嗎?肯定不行嘛,記憶體會撐爆的!所以,你還需要掌握一項管控執行緒數量的技術——執行緒池,我將通過一個Web伺服器的案例,給你展示為什麼要使用執行緒池以及如何將無執行緒數量管控的程式碼改為由執行緒池管控的程式碼:Java趣談——如何像Tomcat一樣處理請求

另外,我還將從Java併發大師Doug Lea的視角,帶你瞭解Java執行緒池背後的原理:Java執行緒池是如何誕生的?

6、學點設計——併發方案

學會了外功,又掌握了內功,可以上江湖闖蕩了嗎?等等,還有一點,你要知道什麼才是你應該出手的時機,你總不能一上來就放大招殺敵一千自損四百吧。Java併發也是如此,你要知道,在什麼情況下,應該對任務進行並行化處理,以及哪種情況下並行處理效果更好,我用了一個頁面渲染器的案例,給你展示了,如何對併發方案進行設計和優化:Java趣談——如何寫出一個高效的頁面渲染器。

好了,本篇文章就分享到這裡了。有興趣的新手夥伴們可以關注收藏起來,以後需要的時候可以多看看。如果有正在學java的程式設計師,可來我們的java技術學習扣qun哦:59789,1510裡面免費送java的視訊系統教程!