計算機用戶想固然地認爲他們的系統一次能夠作不止一件事,他們設想他們能夠繼續在文字處理器中工做,而其餘應用程序則下載文件、管理打印隊列和流音頻,即便是單個應用程序一般也但願一次完成多個任務。例如,流式音頻應用程序必須同時從網絡上讀取數字音頻、解壓縮、管理回放並更新其顯示,甚至文字處理器應始終準備好響應鍵盤和鼠標事件,不管從新格式化文本或更新顯示有多繁忙,能夠執行此類操做的軟件稱爲併發軟件。html
Java平臺的設計初衷是爲了支持併發編程,在Java編程語言和Java類庫中提供基本的併發支持,從5.0版開始,Java平臺還包含高級併發API,本課程介紹了平臺的基本併發支持,並總結了java.util.concurrent
包中的一些高級API。java
在併發編程中,有兩個基本的執行單元:進程和線程,在Java編程語言中,併發編程主要涉及線程,可是,進程也很重要。程序員
計算機系統一般具備許多活動進程和線程,即便在只有單個執行核心的系統中也是如此,所以在任何給定時刻只有一個線程實際執行,單個核心的處理時間經過稱爲時間切片的OS功能在進程和線程之間共享。編程
對於具備多個處理器或具備多個執行核心的處理器的計算機系統變得愈來愈廣泛,這極大地加強了系統併發執行進程和線程的能力 — 但即便在沒有多個處理器或執行核心的簡單系統上,併發也是可能的。segmentfault
進程具備獨立的執行環境,進程一般具備完整的私有基本運行時資源集,特別是,每一個進程都有本身的內存空間。api
進程一般被視爲程序或應用程序的同義詞,可是,用戶看做的單個應用程序實際上多是一組協做進程,爲了促進進程之間的通訊,大多數操做系統都支持進程間通訊(IPC)資源,例如管道和socket,IPC不只用於同一系統上的進程之間的通訊,還用於不一樣系統上的進程。網絡
Java虛擬機的大多數實現都做爲單個進程運行,Java應用程序可使用ProcessBuilder對象建立額外進程,多進程應用程序超出了本課程的範圍。多線程
線程有時被稱爲輕量級進程,進程和線程都提供執行環境,但建立新線程所需的資源比建立新進程要少。併發
線程存在於進程中 — 每一個進程至少有一個線程,線程共享進程的資源,包括內存和打開文件,這使高效但可能有問題的通訊。oracle
多線程執行是Java平臺的基本特性,每一個應用程序至少有一個線程 — 或幾個,若是你計算執行內存管理和信號處理等任務的「系統」線程的話。可是從應用程序員的角度來看,你只從一個線程開始,稱爲主線程,該線程具備建立額外線程的能力,咱們將在下一節中進行演示。