我正在學習編寫線程安全程序以及如何評估非線程安全的代碼。Java線程安全計數器
如果一個類在由多個線程執行時正常工作,則該類被認爲是線程安全的。
我的Counter.java不是線程安全的,但是對於所有3個線程,輸出的打印效果都是0-9。
任何人都可以解釋爲什麼嗎?以及線程安全如何工作?
public class Counter {
private int count = 0;
public void increment() {
count++;
}
public void decrement() {
count--;
}
public void print() {
System.out.println(count);
}
}
public class CountThread extends Thread {
private Counter counter = new Counter();
public CountThread(String name) {
super(name);
}
public void run() {
for (int i=0; i<10; i++) {
System.out.print("Thread " + getName() + " ");
counter.print();
counter.increment();
}
}
}
public class CounterMain {
public static void main(String[] args) {
CountThread threadOne = new CountThread("1");
CountThread threadTwo = new CountThread("2");
CountThread threadThree = new CountThread("3");
threadOne.start();
threadTwo.start();
threadThree.start();
}
}
您正在使用每個線程不同的計數器對象,這就是爲什麼你沒有看到在這種情況下,任何線程安全問題。 – Leon 2013-04-06 14:35:38