第一章 簡介

(1)下面是一段非線程安全的數值序列生成器代碼:

public class UnsafeSequence{

? ? private int value;

? ? public void getNext(){

? ? ? ? return value++;

? ? }

}

如果執行時機不對,那么在兩個線程調用getNext時會得到相同的值;因為value++看似是一個單獨的操作,單事實上它包含三個獨立的操作:讀取value,將value+1,并將結果寫入value;由于運行時可能有多個線程的操作交替執行,因此這兩個線程可能同時執行讀操作,從而使他們得到相同的值,并同時+1,結果就是,在不同的線程調用中返回了相同的值;

2.將getNext方法設置為synchronized即可修復線程不安全的錯誤;

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。

推薦閱讀更多精彩內容