- 進程:是指一個內存中運行的應用程序,每個進程都有一個獨立的內存空間,一個應用程序可以同時運行多
個進程;進程也是程序的一次執行過程,是系統運行程序的基本單位;系統運行一個程序即是一個進程從創
建、運行到消亡的過程。 - 線程:進程內部的一個獨立執行單元;一個進程可以同時併發的運行多個線程,可以理解爲一個進程便相當
於一個單 CPU 操作系統,而線程便是這個系統中運行的多個任務。 - 進程與線程的區別
進程:有獨立的內存空間,進程中的數據存放空間(堆空間和棧空間)是獨立的,至少有一個線程。
線程:堆空間是共享的,棧空間是獨立的,線程消耗的資源比進程小的多。
注意: - 因爲一個進程中的多個線程是併發運行的,那麼從微觀角度看也是有先後順序的,哪個線程執行完全取決於
CPU 的調度,程序員是干涉不了的。而這也就造成的多線程的隨機性。 - Java 程序的進程裏面至少包含兩個線程,主進程也就是 main()方法線程,另外一個是垃圾回收機制線程。每
當使用 java 命令執行一個類時,實際上都會啓動一個 JVM,每一個 JVM 實際上就是在操作系統中啓動了一個
線程,java 本身具備了垃圾的收集機制,所以在 Java 運行時至少會啓動兩個線程。 - 由於創建一個線程的開銷比創建一個進程的開銷小的多,那麼我們在開發多任務運行的時候,通常考慮創建
多線程,而不是創建多進程。
線程調度: - 計算機通常只有一個CPU時,在任意時刻只能執行一條計算機指令,每一個進程只有獲得CPU的使用權才能執行指
令。所謂多進程併發運行,從宏觀上看,其實是各個進程輪流獲得CPU的使用權,分別執行各自的任務。那麼,在可運行
池中,會有多個線程處於就緒狀態等到CPU,JVM就負責了線程的調度。JVM採用的是搶佔式調度,沒有采用分時調度,
因此可以能造成多線程執行結果的的隨機性。
創建線程類
Java使用 java.lang.Thread 類代表線程,所有的線程對象都必須是Thread類或其子類的實例。每個線程的作用是
完成一定的任務,實際上就是執行一段程序流即一段順序執行的代碼。Java使用線程執行體來代表這段程序流。
Java中通過繼承Thread類來創建並啓動多線程的步驟如下:
- 定義Thread類的子類,並重寫該類的run()方法,該run()方法的方法體就代表了線程需要完成的任務,因此把
run()方法稱爲線程執行體。 - 創建Thread子類的實例,即創建了線程對象
- 調用線程對象的start()方法來啓動該線程
代碼如下:
測試類:
自定義線程類:
public class Demo01 {
public static void main(String[] args) {
//創建自定義線程對象
MyThread mt = new MyThread(“新的線程!”);
//開啓新線程
mt.start();
//在主方法中執行for循環
for (int i = 0; i < 10; i++) {
System.out.println(“main線程!”+i);
}
}
}
public class MyThread extends Thread {
//定義指定線程名稱的構造方法
public MyThread(String name) {
//調用父類的String參數的構造方法,指定線程的名稱
super(name);
}
/**
- 重寫run方法,完成該線程執行的邏輯
*/
@Override
public void run() {
for (int i = 0; i < 10; i++) {
System.out.println(getName()+":正在執行!"+i);
}
}
}