Java 多線程(一) 基礎知識與概念,java多線程
多線程Multi-Thread 基礎線程概念
線程就是程式中單獨順序的流量控制。
線程本身不能運行,它只能用於程式中。
說明:線程是程式內的順序控制流程,只能使用分配給程式的資源和環境。
進程
進程:執行中的程式。
程式是靜態概念,進程是動態概念。
一個進程可以包含一個或多個線程。
一個進程至少要包含一個線程。
線程與進程的區別
多個進程的內部資料和狀態都是完全獨立的,而多線程是共用一塊記憶體空間和一組系統資源,有可能互相影響。
線程本身的資料通常只有寄存器資料,以及一個程式執行時使用的堆棧,所以線程的切換負擔比進程切換的負擔要小。
多線程程式比多進程程式需要更少的管理費用。
進程是重量級的任務,需要分配給它們獨立的地址空間,處理序間通訊是昂貴和受限的,進程間的轉換也是很需要花費的。
另一方面,線程是輕量級的選手,它們共用相同的地址空間並且共同分享同一個進程,線程間的通訊是便宜的,線程間的轉換也是低成本的。
單線程
單個程式中只有一個線程就是單線程。
當程式啟動運行時,就自動產生一個線程,主方法main就在這個主線程上運行。我們的程式都是由線程來執行的。
多線程
多線程指在單個程式中可以同時運行多個不同的線程執行不同的任務。
多線程編程的目的,就是“最大限度地利用CPU資源”,當某一線程的處理不需要佔用CPU而只和IO等資源打交道時,讓需要佔用CPU的其他線程有機會獲得CPU資源。從根本上說,這就是多線程編程的最終目的。
一個程式實現多個代碼同時交替運行就需要產生多個線程。
CPU隨機地抽出時間,讓我們的程式一會做這件事情,一會做另外的事情。
從宏觀角度來看,多個線程在同時執行(宏觀並行),但是微觀上來看,處理器的個數決定了某一個時刻可以同時啟動並執行最大線程數,如單核CPU某一時刻只能有一個線程在執行(微觀串列),雙核的CPU在某一個時刻,最多可以運行兩個線程,可以做到微觀並行。
Java中的多線程
同其他大多數程式設計語言不同,Java內建支援多線程編程(Multithreaded Programming)。
多線程程式包含兩條或兩條以上並發啟動並執行部分,程式中每個這樣的部分都叫做一個線程(Thread)。每個線程都有獨立的執行路徑,因此多線程是多任務處理的一種特殊形式。
多任務處理被所有的現代作業系統所支援。然而,多任務處理有兩種截然不同的類型:基於進程的和基於線程的。
1.基於進程的多任務處理是更熟悉的形式。進程(process)本質上是一個執行的程式。因此基於進程的多任務處理的特點是允許你的電腦同時運行兩個或更多的程式。
舉例來說,基於進程的多任務處理使你在運用文字編輯器的時候可以同時運行Java編譯器。
在基於進程的多任務處理中,程式是發送器所指派的最小代碼單位。
2.而在基於線程(thread-based)的多任務處理環境中,線程是最小的執行單位。
這意味著一個程式可以同時執行兩個或者多個任務的功能。
例如,一個文字編輯器可以在列印的同時格式化文本。
Java執行緒模式
Java多線程的優點就在於取消了主迴圈/輪詢機制。一個線程可以暫停而不影響程式的其他部分。
多線程允許活的迴圈在每一幀間隙中沉睡一秒而不暫停整個系統。
線程組
所有線程都隸屬於一個線程組。那可以是一個預設線程組,也可以是一個建立線程時明確指定的組。
說明:
在建立之初,線程被限制到一個組裡,而且不能改變到一個不同的組。
若建立多個線程而不指定一個組,它們就會與建立它的線程屬於同一個組。
參考資料
聖思園張龍老師Java SE系列視頻教程。
來源:http://www.cnblogs.com/mengdd/archive/2013/02/16/2913628.html