class MyThread extends Thread {
int num = 0; // 非靜態,每個實例獨有
public void run() {
for (int i=0; i<10; i++) {
System.out.println(Thread.currentThread().getName() + ": " + num++);
}
}
}
// 主程序創建兩個 MyThread 實例啟動,期望共享 num,實則各自輸出 0-9
num 是實例成員變量,每個 MyThread 對象擁有獨立的 num 副本。線程間無共享內存,同步機制(synchronized、volatile)均無效。
static int num = 0; — 類級別共享,需配合 synchronized 或 AtomicInteger 保證原子性。Counter 實例給多個線程,Counter 內部用 AtomicInteger。你的num是類自己的成員變量,對於每一個對象都有屬於自己的num,除非你加上static