public
class
unsafethread}}
);t.
start()
;}while
(thread.
activecount()
>1)
system.out.
println
(sum);}
//1、從主記憶體中講sum變數複製到執行緒的工作記憶體
//2、在工作記憶體中修改變數(+1操作)
//3、將sum變數從執行緒的工作記憶體寫回到主記憶體
//主記憶體sum = 0;
//a-1
//a-2(+1操作---->執行緒a的工作記憶體中,sum=1,主記憶體sum=0)
//b-1(從主記憶體賦值sum=0)
//b-2(+1操作---->執行緒b的工作記憶體中,sum=1,主記憶體sum=0)
//b-3(執行緒b中的sum變數,將值寫回主記憶體sum=1)
//a-3(執行緒a中的sum變數,寫回主記憶體sum=1)
////造成執行緒不安全:共享變數發生了修改的丟失(執行緒b的++操作,發生丟失)
//思考:出現下列兩個現象的原因是什麼??
//1、不是預期的結果20*10000
//2、每次執行結果不一樣
//答:
//一、特殊的原子**(分解執行存在編譯為class問件事,也可能存在cpu執行指令):
// (1)n++,n--,++n,--n都不是原子性:
// 需要分解為三條指令:從記憶體讀取變數到cpu,修改變數,寫回記憶體
// (2)物件的new操作
// object obj = new object();
// 分解為三條指令:分配物件的記憶體,初始化物件,將物件賦值給變數
//二、可見性問題
////三、指令重排序
}
多執行緒 執行緒安全
原因 當多個執行緒同時共享,同乙個全域性變數或靜態變數。做寫的操作時,可能發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。解決方案 方式一 內建鎖synchronized synchronized保證執行緒原子性,當執行緒進入方法的時候,自動獲取鎖,一旦鎖被其它執行緒獲取...
多執行緒 執行緒安全
執行緒安全 多個執行流對臨界資源的爭搶訪問,但是不會出現資料二義性 執行緒安全的實現 同步 通過條件判斷保證對臨界資源訪問的合理性 互斥 通過同一時間對臨界資源訪問的唯一性實現臨界資源訪問的安全性 互斥鎖實現的原理 互斥鎖本身是乙個只有0 1的計數器,描述了乙個臨界資源當前的訪問狀態,所有執行流在訪...
多執行緒安全
專案中需要在多執行緒環境下,輸出日誌到標準輸出,以下是實現過程。首先,我們需要乙個鎖類,能夠自動初始化,並且降低耦合。locker.h created on apr 14,2012 author joan ifndef locker h define locker h include option....