本博客系列是學習併發編程過程當中的記錄總結。因爲文章比較多,寫的時間也比較散,因此我整理了個目錄貼(傳送門),方便查閱。html
併發編程系列博客傳送門java
本章主要對Java併發(Concurrent)在不一樣jdk版本中的發展簡史進行學習。Java語言從初版本至今,內置了對併發(Concurrent)的各類支持技術。爲了可以讓咱們在學習Java併發(Concurrent)時,不被各類各樣的併發技術弄得暈頭轉向,本章先對Java個版本中的主要併發技術進行簡述。編程
在JDK1.4及以前的版本,主要提供的併發技術有:併發
引用百度百科的解釋:框架
volatile是一個類型修飾符(type specifier),就像你們更熟悉的const同樣,它是被設計用來修飾被不一樣線程訪問和修改的變量。volatile的做用是做爲指令關鍵字,確保本條指令不會因編譯器的優化而省略,且要求每次直接讀值。ide
注:百度百科的解釋並非專門針對java語音中的volatile,而是C語音,不過其設計思想類型,能夠拿來借鑑。性能
更通俗易懂的說法,在Java語音中,使用volatile關鍵字的目的:學習
volatile關鍵字還涉及到JMM(Java內存模型,Java Memory Model)以及併發的三個特性(原子性、有序性和可見性),關於volatile關鍵字的更多內容,計劃在後續章節中進行更加詳細的學習。優化
引用百度百科的一段解釋:ui
synchronized 關鍵字,表明這個方法(或代碼塊)加鎖,至關於無論哪個線程(例如線程A),運行到這個方法時,都要檢查有沒有其它線程B(或者C、 D等)正在用這個方法(或者該類的其餘同步方法),有的話要等正在使用synchronized方法的線程B(或者C 、D)運行完這個方法後再運行此線程A,沒有的話,鎖定調用者,而後直接運行。它包括兩種用法:synchronized 方法 和 synchronized 代碼塊 。
簡單來講,synchronized關鍵字以同步方法和同步代碼塊的方式,爲方法和代碼塊上的對象加鎖。使得同一時刻,在這個對象上的多個線程,只能由持有這個對象鎖的單個線程進行代碼的調用執行。
synchronized 關鍵字可以保證代碼的原子性、可見性和有序性。
關於synchronized關鍵字的更多內容,計劃在後續章節中進行更加詳細的學習。
所謂不變模式,就是指:在併發編程中,爲確保數據的一致性和正確性,使用一種不可改變的對象。依靠其不可變的性質,來確保在沒有同步的狀況下依舊保持一致性和正確性。
Java中不變模式相關技術有:
關於不變模式,就簡單進行這些介紹。若是感興趣,能夠自行學習。
衆所周知,JDK5是Java發展的一個重要版本,提供了不少技術,如泛型 Generic、枚舉類型 Enumeration、可變參數varargs、註解 Annotations等等。
在JDK1.5版本中,也提供了對併發編程極爲重要的一個包:java.util.concurrent(併發包)
java.util.concurrent(併發包)提供了一些列較爲給力的併發技術,主要有:
關於原子(Atomic)類型、顯式鎖(Lock)接口、併發集合、Callable和Future接口、執行器(Executor接口)的更多內容,計劃在後續章節中進行更加詳細的學習。
在JDK1.7版本中,主要提供的併發編程技術有:
關於分支合併(Fork/Join)框架的更多內容,計劃在後續章節中進行更加詳細的學習。
在JDK.18版本中,主要提供的併發編程技術有: