Java 常用并發(fā)工具簡介
1. 前言
大家好,從本小節(jié)開始,我們將一起學(xué)習(xí) JDK 自帶的常用 Java 并發(fā)工具。本課程重在介紹 JDK 并發(fā)工具的基本應(yīng)用方法,其中原理介紹相對會少一些,對于底層原理的了解,大家在學(xué)習(xí)的過程中查閱“Java 并發(fā)原理入門教程” 。
JDK 自帶的并發(fā)工具非常豐富,本系列為大家介紹最常見最實用的并發(fā)控制工具。
作為本系列的第一個小節(jié),我將為你簡單介紹 JDK 自帶的并發(fā)工具演變歷史,熟練掌握常見并發(fā)工具的必要性、學(xué)習(xí)思路、學(xué)習(xí)過程應(yīng)該注意的事項,以及本課程的講解思路。
下面,我們先了解一下 JDK 常用并發(fā)工具是如何一步一步發(fā)展而來的。
2. 不斷演進(jìn)的 Java 并發(fā)工具集
在 JDK 1.4 及之前的版本中,提供的并發(fā)工具很有限,最常用的就是 synchronized 關(guān)鍵字、 volatile 關(guān)鍵字、final 關(guān)鍵字。
在 JDK 1.5 版本中,直接提供了一套相對完整的并發(fā)工具包,即 java.util.concurrent 包。
在 JDK 1.7 版本中,進(jìn)一步豐富并發(fā)工具包,比如增加了 Fork / Join 并發(fā)編程框架。
在 JDK 1.8 版本中,進(jìn)一步對部分工具進(jìn)行擴充,提升并發(fā)工具包的性能。以及后繼的版本中繼續(xù)增加各類工具。
本主題以 JDK 1.8 中常用的并發(fā)工具作介紹。為什么 JDK 各版本中對并發(fā)工具不斷優(yōu)化增強呢?當(dāng)然是因為并發(fā)編程太重要了,我們需要關(guān)注并學(xué)習(xí)好并發(fā)編程。
3. 為什么要學(xué)習(xí)并發(fā)工具?
近年來計算機程序向著大規(guī)模、分布式、多任務(wù)方向發(fā)展,尤其是基于 Java 的企業(yè)級應(yīng)用,幾乎都采用服務(wù)化、集群化的方式實現(xiàn)。
這些都要求充分利用各類系統(tǒng)資源,且要可靠健壯,而要實現(xiàn)這些都離不開并發(fā)編程、以及處理并發(fā)編程帶來的各類問題。并發(fā)工具是并發(fā)編程的代碼結(jié)晶,就像一顆顆糖果一樣誘人,熟練使用常見的并發(fā)工具,會為我們?nèi)粘Q邪l(fā)中涉及并發(fā)場景的編程,實現(xiàn)提供非常便捷的且高質(zhì)量的幫助。
另外在各類技術(shù)面試中,也不可避免地會考察并發(fā)編程的技能點,熟練使用常見的并發(fā)工具,是我們技術(shù)人員的基本技術(shù)要求。
4. 學(xué)習(xí)思路是什么?
并發(fā)編程本身的學(xué)習(xí)曲線比較陡峭,尤其是對初學(xué)者而言,理解并發(fā)編程需要一個過程,在沒有完全參透并發(fā)編程的原理之前,可以先把目光集中在基本的并發(fā)工具應(yīng)用上面來,先做到會熟練使用,再逐步深入理解其底層的核心原理。
所以對于初學(xué)者而言,重點在于理解常見并發(fā)工具的種類、應(yīng)用場景、以及使用方法。對于每一個常見的并發(fā)工具,需反復(fù)琢磨,要舉一反三,多加練習(xí),萬不可心急而浮于表面。
在熟練掌握了這些基本知識之后,就可以深入到各類工具的底層實現(xiàn),進(jìn)一步了解其背后的原理和編程思想。進(jìn)而可以做到靈活構(gòu)建適合各類特殊需求的并發(fā)控制工具。
5. 學(xué)習(xí)基礎(chǔ)
在開始學(xué)習(xí) Java 并發(fā)工具之前,大家需要掌握以下技巧:
- 操作系統(tǒng)基本知識,Java 并發(fā)編程是基于操作系統(tǒng)基礎(chǔ)之上的,了解操作系統(tǒng)基本原理,尤其是操作系統(tǒng)的任務(wù)調(diào)度管理知識,對理解并發(fā)編程工具很有必要。
- Java 語言基礎(chǔ)語法,后繼章節(jié)中采用 Java 語言做示例。
6. 本課程如何設(shè)計?
在本課程中,我們首先會對 Java 編程中常用的并發(fā)工具包,做簡單的介紹,讓大家有一個整體的概念。之后,從比較容易使用和理解的高層并發(fā)工具類入手,逐個介紹,再遞進(jìn)到較底層的并發(fā)工具類做介紹,最后著重介紹并發(fā)編程中常用的線程框架。
在講解過程中,會對知識點的基本概念、應(yīng)用場景做介紹,會穿插一些實踐中或正面或反面的使用例子,必要的時候會做一些原理講解、以及工具之間的對比,幫助大家加深理解,學(xué)以致用。