http://www.iteye.com/magazines/131 java
計算機的使用者一直覺得他們的計算機能夠同時作不少事情。他們認爲當其餘的應用程序在下載文件,管理打印隊列或者緩衝音頻的時候他們能夠繼續在文字處理程序上工做。甚至對於單個應用程序,他們任然期待它能在在同一時間作不少事情。舉個例子,一個流媒體播放程序必須能同時完成如下工做:從網絡上讀取數字音頻,解壓縮數字音頻,管理播放和更新程序顯示。甚至文字處理器也應該能在忙於從新格式化文本和刷新顯示的狀況下同時響應鍵盤和鼠標事件。這樣的軟件就被稱爲併發軟件。 程序員
經過Java語言和Java類庫對於基礎併發的支持,Java平臺具備徹底(from the ground up )支持併發編程的能力。從JDK5.0起,Java平臺還引入了高級併發APIs。這個課程不只涵蓋了Java平臺基礎併發內容,還對高級併發APIs有必定的闡述。 編程
進程和線程
在併發編程中,有兩個基本的執行單元:進程和線程。在java語言中,併發編程最關心的是線程,然而,進程也是很是重要的。
即便在只有單一的執行核心的計算機系統中,也有許多活動的進程和線程。所以,在任何給定的時刻,只有一個線程在實際執行。處理器的處理時間是經過操做系統的時間片在進程和線程中共享的。
如今具備多處理器或有多個執行內核的多處理器的計算機系統愈來愈廣泛,這大大加強了系統併發執行的進程和線程的吞吐量–但在不沒有多個處理器或執行內核的簡單的系統中,併發任然是可能的。
進程
進程具備一個獨立的執行環境。一般狀況下,進程擁有一個完整的、私有的基本運行資源集合。特別地,每一個進程都有本身的內存空間。
進程每每被看做是程序或應用的代名詞,然而,用戶看到的一個單獨的應用程序實際上多是一組相互協做的進程集合。爲了便於進程之間的通訊,大多數操做系統都支持進程間通訊(IPC),如pipes 和sockets。IPC不只支持同一系統上的通訊,也支持不一樣的系統。
Java虛擬機的大多數實現是單進程的。Java應用可使用的ProcessBuilder對象建立額外的進程,多進程應用超出了本課的範圍。
線程
線程有時也被稱爲輕量級的進程。進程和線程都提供了一個執行環境,但建立一個新的線程比建立一個新的進程須要的資源要少。
線程是在進程中存在的 — 每一個進程最少有一個線程。線程共享進程的資源,包括內存和打開的文件。這樣提升了效率,但潛在的問題就是線程間的通訊。
多線程的執行是Java平臺的一個基本特徵。每一個應用都至少有一個線程 – 或幾個,若是算上「系統」線程的話,好比內存管理和信號處理等。可是從程序員的角度來看,啓動的只有一個線程,叫主線程。這個線程有能力建立額外的線程,咱們將在下一節演示。
網絡