ps:2019.5.1 重寫本篇
多線程毋庸置疑的點非常多,很雜也很深,你要是做后臺開發可以研究的非常深入,甚至像阿里一樣自己修改 JVM(租戶的概念),即便你是做 android 開發的朋友,多線程一樣也是要很熟,移動端太多的場景需要異步執行了,雖然我們有開源的異步執行庫,但是不代表我們自己就可以不會多線程的使用了,至少多線程基礎的概念,同步,鎖的類型,鎖的優化,線程池,阻塞隊列,callback,futrueTask 都是基本要會的,有些功能可能要我們自己做異步實現,比如數據庫操作,日志埋點操作,自己寫的異步操作可以操作性更強
學習多線程是要按部就班的來,因為點多,難易程度不同,并且前后概念由依賴關聯性,所以順序很重要
-
多線程的基礎 Thread 類我們必須要熟練,熟悉 Thread 的創建,和 Callable、Future、FutureTask 的配和,Thread 線程的基本概念,狀態,還有 wait,notify,join 等多線程基本的通信手段
-
了解過 Thread 之后,我們就要狠扎多線程的基礎理論點了,我們要搞懂 java 同步的2個關鍵字 synchronized 和 volatile,并且結合 java 內存模型來深入體會這2個關鍵字的作用,然后我們在學習完內存模型后順帶著把 GC 原理搞懂了,都是在一塊的知識點,連帶著學最合適。下一步我們就要知道為什么我們要減少創建線程對象的數量,線程切換會帶來嚴重的性能問題,包括:線程上下文切換,線程狀態的切換。在這之后我們就要學習同步的關鍵了:鎖,鎖的原理,CAS 原子算法,JVM 多鎖的優化, reentrantLock 重入鎖,然后再結合一個小例子,體會下同步
-
這個時候我想大家對于多線程的理論至少已經有了立體的概念,這樣我們最后面的學習中才不會出現吃力的現象,這個時候我們就要學習多線程的核心:線程池 了,學習其原理,學習他在各個異步任務庫中的實現,這里設計到 android 的知識點了
-
上面的學完了,使用多線程基本沒問題了,但是上面的說實話只是多線程的基本,后面還有呢,繼續深入學習的話看下面,這部分我會逐漸添加新內容的
上面都是我自己學習多線程的感悟,基于自己的理解和學習習慣,順序,進度,要是大家在看一些點的時候看的不是那么透徹或是沒搞懂的話可以看下面的資料:
- 簡書平臺
優先推薦:香沙小熊 同學的資料,入門性更好
- 其他
-
死磕 Java 系列
這個里面多線程非常的全 - java,多線程學習 _ github