class PrintThread extends Thread {
private int count = 0;
public void run() {
for (;;) {
System.out.println(++count + ": Thread");
}
}
}
// 使用
new PrintThread().start();
class PrintTask implements Runnable {
public void run() {
for (;;) System.out.println("T");
}
}
// 使用
new Thread(new PrintTask()).start();
對比:Runnable 解耦任務與線程控制,支援線程池,為現代推薦方式。
ThreadGroup group = new ThreadGroup("MyGroup");
new Thread(group, new Task(), "T1").start();
new Thread(group, new Task(), "T2").start();
// 遞歸查找頂級組
ThreadGroup parent = Thread.currentThread().getThreadGroup();
while (parent.getParent() != null) parent = parent.getParent();
parent.list(); // 打印完整線程樹
線程創建後終身屬於該組,不可變更。
MIN_PRIORITY) ~ 10 (MAX_PRIORITY),預設 5 (NORM_PRIORITY)| 狀態 | 說明 |
|---|---|
| NEW | 創建未啟動 |
| RUNNABLE | 就緒/運行中 |
| BLOCKED | 等待鎖/IO |
| WAITING | 無限期等待 |
| TIMED_WAITING | 定時等待 |
| TERMINATED | 已結束 |
常用方法:sleep()、yield()、join()、interrupt()。已棄用:stop()、suspend()、resume()(不安全)。
JVM 在所有非守護線程結束前不會退出。守護線程(GC 等)不阻止 JVM 關閉。