首頁  >  文章  >  Java  >  Java -- 多執行緒

Java -- 多執行緒

高洛峰
高洛峰原創
2016-11-21 11:09:071913瀏覽

  多執行緒的實作方法:

    繼承Thread類別

    實作Runnable類別

  --------------------------------------- -------------------------------------------------- ----

  1. 繼承Thread類別

    繼承Thread類別之後,需要覆寫父類別的public void run() 方法,作為執行緒的主方法。

    所有執行緒的執行一定是並發的,即:同一個時間段上會有多個執行緒交替執行。為了達到這樣的目的,絕對不能直接呼叫run()方法,而是應該呼叫Thread類別的start()方法啟動多執行緒。

    呼叫 start() 方法與呼叫 run() 方法的比較:

public class MyThread extends Thread {
    private String name;
    public MyThread(String name) {
        this.name = name;
    }
    
    @Override
    public void run() {
        for(int i=0; i<10; i++) {
        System.out.println(name + "打印:" + i);
        }
    }
    
    public static void main(String[] args) {
        MyThread mt1 = new MyThread("线程A");
        MyThread mt2 = new MyThread("线程B");
        MyThread mt3 = new MyThread("线程C");
        mt1.start();
        mt2.start();
        mt3.start();
    }
}

  運作結果:(三個執行緒同時且交替執行依序執行)

Java -- 多執行緒

  2. start()方法實作多執行緒的原理

    開啟Thread類別來源程式碼中()方法是所在作業系統的方法。 Java -- 多執行緒

    由於執行緒的啟動需要牽扯到作業系統中資源的分配問題,所以具體的執行緒的啟動應該根據不同的作業系統有不同的實作。而JVM則根據不同的作業系統中定義的start0()方法進行不同的實作。這樣,在多執行緒的層次上start0()方法的名稱不會改變,而不同的作業系統有不同的實作。

原理圖

    結論:只有Thread類別的start()方法才能進行作業系統資源的分配,所以啟動多執行緒的方式永遠就是Thread類別的start()方法。

Java -- 多執行緒

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn