首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> Java 程式設計 >> Java 相關知識

Java 多線程實現的兩種核心方式詳解

     編輯:Java 相關知識

Java 內建多線程支援

Java 語言層面內建了多線程機制,所有實作 Runnable 介面的類別皆可啟動新線程。新線程會執行該實例的 run() 方法,當 run() 執行結束,線程即停止。值得注意的是,一個線程執行結束後,該實例無法重複啟動,必須建立新實例再啟動新線程。

Thread 類別與 start() 方法

Thread 類別實作了 Runnable 介面,代表一個線程實例。啟動線程的唯一途徑是呼叫 Thread 的 start() 實例方法:

Thread t = new Thread();
t.start();

start() 是 native 方法,它會啟動新線程並執行 run()。Thread 預設的 run() 方法為空實作。直接呼叫 run() 並不會啟動新線程,僅同於呼叫普通 Java 方法。

實現自訂線程的兩種途徑

方式一:繼承 Thread 類別並覆寫 run()

public class MyThread extends Thread {
    @Override
    public void run() {
        System.out.println("MyThread.run()");
    }
}

啟動方式:new MyThread().start();

方式二:實作 Runnable 介面(適用於已繼承其他類別的情況)

public class MyThread extends OtherClass implements Runnable {
    @Override
    public void run() {
        System.out.println("MyThread.run()");
    }
}

啟動時需先實例化 Thread 並傳入 Runnable 實例:

MyThread myt = new MyThread();
Thread t = new Thread(myt);
t.start();

原理探究:Thread 如何呼叫目標 run()

當建構 Thread 時傳入 Runnable target 參數,Thread 的 run() 會委派呼叫 target.run()。參考 JDK 原始碼:

public void run() {
    if (target != null) {
        target.run();
    }
}

這種設計體現了組合優於繼承的靈活性,也是 Java 多線程編程的基石。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved