線程與進程淺談

  • 進程:是指一個內存中運行的應用程序,每個進程都有一個獨立的內存空間,一個應用程序可以同時運行多
    個進程;進程也是程序的一次執行過程,是系統運行程序的基本單位;系統運行一個程序即是一個進程從創
    建、運行到消亡的過程。
  • 線程:進程內部的一個獨立執行單元;一個進程可以同時併發的運行多個線程,可以理解爲一個進程便相當
    於一個單 CPU 操作系統,而線程便是這個系統中運行的多個任務。
  • 進程與線程的區別
    進程:有獨立的內存空間,進程中的數據存放空間(堆空間和棧空間)是獨立的,至少有一個線程。
    線程:堆空間是共享的,棧空間是獨立的,線程消耗的資源比進程小的多。
    注意:
  • 因爲一個進程中的多個線程是併發運行的,那麼從微觀角度看也是有先後順序的,哪個線程執行完全取決於
    CPU 的調度,程序員是干涉不了的。而這也就造成的多線程的隨機性。
  • Java 程序的進程裏面至少包含兩個線程,主進程也就是 main()方法線程,另外一個是垃圾回收機制線程。每
    當使用 java 命令執行一個類時,實際上都會啓動一個 JVM,每一個 JVM 實際上就是在操作系統中啓動了一個
    線程,java 本身具備了垃圾的收集機制,所以在 Java 運行時至少會啓動兩個線程。
  • 由於創建一個線程的開銷比創建一個進程的開銷小的多,那麼我們在開發多任務運行的時候,通常考慮創建
    多線程,而不是創建多進程。
    線程調度:
  • 計算機通常只有一個CPU時,在任意時刻只能執行一條計算機指令,每一個進程只有獲得CPU的使用權才能執行指
    令。所謂多進程併發運行,從宏觀上看,其實是各個進程輪流獲得CPU的使用權,分別執行各自的任務。那麼,在可運行
    池中,會有多個線程處於就緒狀態等到CPU,JVM就負責了線程的調度。JVM採用的是搶佔式調度,沒有采用分時調度,
    因此可以能造成多線程執行結果的的隨機性。
    創建線程類
    Java使用 java.lang.Thread 類代表線程,所有的線程對象都必須是Thread類或其子類的實例。每個線程的作用是
    完成一定的任務,實際上就是執行一段程序流即一段順序執行的代碼。Java使用線程執行體來代表這段程序流。
    Java中通過繼承Thread類來創建並啓動多線程的步驟如下:
  1. 定義Thread類的子類,並重寫該類的run()方法,該run()方法的方法體就代表了線程需要完成的任務,因此把
    run()方法稱爲線程執行體。
  2. 創建Thread子類的實例,即創建了線程對象
  3. 調用線程對象的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);
    }
    }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章