多執行緒------執行緒與程式/執行緒排程/建立執行緒

Kun鯤之大發表於2020-12-31

執行緒與程式

  • 程式:是指一個記憶體中執行的應用程式,每個程式都有一個獨立的記憶體空間,一個應用程式可以同時執行多個程式;程式也是程式的一次執行過程,是系統執行程式的基本單位;系統執行一個程式即是一個程式從建立、執行到消亡的過程。

  • 執行緒:執行緒是程式中的一個執行單元,負責當前程式中程式的執行,一個程式中至少有一個執行緒。一個程式中是可以有多個執行緒的,這個應用程式也可以稱之為多執行緒程式。

    簡而言之:一個程式執行後至少有一個程式,一個程式中可以包含多個執行緒


執行緒排程

  • 分時排程

    所有執行緒輪流使用 CPU 的使用權,平均分配每個執行緒佔用 CPU 的時間。

  • 搶佔式排程

    優先讓優先順序高的執行緒使用 CPU,如果執行緒的優先順序相同,那麼會隨機選擇一個(執行緒隨機性),Java使用的為搶佔式排程

    • 設定執行緒的優先順序

    • 搶佔式排程詳解

      大部分作業系統都支援多程式併發執行,現在的作業系統幾乎都支援同時執行多個程式。比如:現在我們上課一邊使用編輯器,一邊使用錄屏軟體,同時還開著畫圖板,dos視窗等軟體。此時,這些程式是在同時執行,”感覺這些軟體好像在同一時刻執行著“。

      實際上,CPU(中央處理器)使用搶佔式排程模式在多個執行緒間進行著高速的切換。對於CPU的一個核而言,某個時刻,只能執行一個執行緒,而 CPU的在多個執行緒間切換速度相對我們的感覺要快,看上去就是在同一時刻執行。
      其實,多執行緒程式並不能提高程式的執行速度,但能夠提高程式執行效率,讓CPU的使用率更高。
      在這裡插入圖片描述


建立執行緒類

簡述:

  • Java使用java.lang.Thread類代表執行緒
  • 所有的執行緒物件都必須是Thread類或其子類的例項。
  • 每個執行緒的作用是完成一定的任務,實際上就是執行一段程式流即一段順序執行的程式碼。Java使用執行緒執行體來代表這段程式流。

建立、啟動多執行緒的步驟(繼承Thread類方式):

步驟

  1. 定義Thread類的子類,並重寫該類的run()方法,該run()方法的方法體就代表了執行緒需要完成的任務,因此把run()方法稱為執行緒執行體。
  2. 建立Thread子類的例項,即建立了執行緒物件
  3. 呼叫執行緒物件的start()方法來啟動該執行緒

程式碼測試

  1. 自定義執行緒類:
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);
		}
	}
}
  1. 測試:
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);
		}
	}
}

相關文章