| 方法 | 說明 |
run() | 執行緒主體邏輯,必須重寫;直接呼叫 run() 不會啟動新執行緒,只是普通方法呼叫。 |
start() | 啟動執行緒,JVM 分配資源並排程呼叫 run()。 |
stop() | 已棄用:強制終止,導致鎖釋放不一致,資料損壞風險。 |
suspend() | 已棄用:暫停執行緒,易造成死結。 |
resume() | 已棄用:恢復暫停執行緒。 |
sleep(ms) | 靜態方法,讓當前執行緒睡眠,不釋放鎖。 |
join() | 等待該執行緒終止。 |
interrupt() | 中斷阻塞狀態 (sleep/wait/join),拋出 InterruptedException。 |
範例:三個執行緒併發列印
public class ThreadDemo {
public static void main(String[] args) {
new MyThread("Thread-A").start();
new MyThread("Thread-B").start();
new MyThread("Thread-C").start();
}
}
class MyThread extends Thread {
private final String name;
MyThread(String name) { this.name = name; }
@Override
public void run() {
int iterations = (int)(Math.random() * 15);
int sleepMs = (int)(Math.random() * 1000);
System.out.println(name + " running for " + iterations + " iterations");
System.out.println(name + " sleeping for " + sleepMs + "ms between loops");
for (int i = 0; i < iterations; i++) {
System.out.println(name + " " + i);
try { Thread.sleep(sleepMs); }
catch (InterruptedException e) { Thread.currentThread().interrupt(); break; }
}
}
}
輸出範例 (非確定性順序)
Thread-A running for 12 iterations
Thread-B running for 8 iterations
Thread-C running for 14 iterations
Thread-A sleeping for 305ms between loops
Thread-C sleeping for 836ms between loops
Thread-B sleeping for 195ms between loops
Thread-A 0
Thread-C 0
Thread-B 0
...
Thread-A 11
Thread-C 13
Thread-B 7
Thread-C 14
繼承 Thread 的限制與替代方案
- Java 單繼承限制:若類已繼承其他類,無法繼承
Thread。
- 替代:實作 Runnable 介面 (或 Java 8+ Lambda),將任務與執行緒控制分離,更靈活、可重用、適合線程池。
// Runnable 寫法
Runnable task = () -> { /* 邏輯 */ };
new Thread(task).start();
// 或線程池
ExecutorService pool = Executors.newFixedThreadPool(3);
pool.submit(task);
- 上一篇文章: Java 建立隱藏檔案:Runtime.exec 呼叫 attrib 與現代 NIO.2 替代方案
- 下一篇文章: 基於 JXL 的 Excel 匯出工具類封裝:支援 JDBC ResultSet 與自定義 Record 兩種資料源
Copyright ©
程式碼之家 All Rights Reserved