Java 誕生前,傳統語言同一時刻僅能單任務,效率低落(如等待輸入阻塞)。隨網際網路發展,阻塞導致 CPU 閒置日益不可接受。Java 內建多線程支援,允許一個程式並行執行多個相對獨立的線程,大幅提升執行效率與處理能力。
Java 提供 Thread 類別建立線程,線程即 Thread 或其子類實例。兩種定義執行體 run() 的方式:
run()。Runnable,實現 run(),再以該實例建立 Thread 物件。線程建立後處於就緒狀態,呼叫 start() 啟動(非直接呼叫 run())。start() 通知系統線程就緒可執行 run(),隨即返回,使呼叫端與線程並行執行。
// 方式一:繼承 Thread
class Thread1 extends Thread {
public void run() {
System.out.println("Thread1 is running...");
}
}
// 方式二:實作 Runnable
class Thread2 implements Runnable {
public void run() {
System.out.println("Thread2 is running...");
}
}
public class MultiThread {
public static void main(String[] args) {
Thread1 t1 = new Thread1();
Thread t2 = new Thread(new Thread2());
t1.start();
t2.start();
}
}
優先級 1~10(低到高),透過 setPriority(int) 設置。高優先級線程搶佔 CPU 機率較大、時間較長。可在啟動前或啟動後調整。
t1.setPriority(6);
t2.setPriority(3);
多線程共享資料時,異步存取可能導致資料不一致或邏輯錯誤。Java 提供 synchronized 關鍵字、wait()/notify() 等機制協調線程間對共享資源的存取,確保執行緒安全。(詳細同步機制請參考後續章節)