理解多線程前,必須區分進程與線程:
JVM 啟動時自動創建 main 線程執行 main() 方法,同時還有垃圾回收線程,故 Java 程序至少包含兩個線程。
| 優點 | 缺點 |
|---|---|
| 解決單程序多任務執行 | 增加 CPU 上下文切換開銷 |
| 提高資源利用率(非單純提速) | 易引發線程安全問題(共享數據競態) |
| 可能出現死鎖 |
class MyThread extends Thread {
@Override
public void run() {
// 線程任務代碼
}
}
// 使用
new MyThread().start();
缺點:Java 單繼承限制,若已繼承其他類則無法使用。
class MyTask implements Runnable {
@Override
public void run() {
// 線程任務代碼
}
}
// 使用
new Thread(new MyTask()).start();
核心原理:Thread 內部持有 Runnable target 變量,其 run() 方法會調用 target.run()。實現類對象不是線程對象,必須包裝在 Thread 中才能啟動。
關鍵點:絕不可直接調用 run(),否則僅作普通方法執行,不會開啟新線程;必須調用 start()。
| 方法 | 說明 |
|---|---|
Thread(String name) | 構造函數,指定線程名稱 |
getName()/setName() | 獲取/設置線程名稱 |
sleep(long ms) | 靜態方法,讓當前執行線程休眠指定毫秒,需捕獲 InterruptedException |
currentThread() | 靜態方法,返回當前正在執行代碼的線程對象 |
getPriority()/setPriority(int) | 獲取/設置優先級(1-10,默認 5),具體調度取決於 OS |
sleep() 不能拋出異常只能捕獲?Thread.run() 未聲明拋出異常,子類覆寫時根據「異常兼容性規則」只能拋出同級或子類異常,故 InterruptedException(受檢異常)只能內部捕獲處理。
掌握 Runnable + Thread 組合模式是 Java 多線程開發的基石,配合 start() 啟動、sleep() 讓步、優先級設置等 API,能構建高效並發程序。後續將深入講解線程同步、鎖機制、線程池等進階主題。