多執行緒 執行緒安全

2021-10-03 18:59:36 字數 962 閱讀 7441

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....