(1)下面是一段非線程安全的數值序列生成器代碼:
public class UnsafeSequence{
? ? private int value;
? ? public void getNext(){
? ? ? ? return value++;
? ? }
}
如果執行時機不對,那么在兩個線程調用getNext時會得到相同的值;因為value++看似是一個單獨的操作,單事實上它包含三個獨立的操作:讀取value,將value+1,并將結果寫入value;由于運行時可能有多個線程的操作交替執行,因此這兩個線程可能同時執行讀操作,從而使他們得到相同的值,并同時+1,結果就是,在不同的線程調用中返回了相同的值;
2.將getNext方法設置為synchronized即可修復線程不安全的錯誤;