簡單多執行緒是否安全判斷

2022-03-10 05:47:57 字數 812 閱讀 7917

1.明確哪些**是多執行緒執行的**, 

2.明確共享資料 

3.明確多執行緒執行**中哪些語句是操作共享資料.

首先第一步,找到多執行緒執行的**

也就是run方法裡面的**

for (int i = 0; i < 3; i++)

另外這裡用到了add方法,所以add也算

public void add(int n)

第二步,找到共享資料

bank b = new bank();

private int sum = 0;

第三步,明確多執行緒使用的共享資料. 

首先對於資料b就一條語句使用了這個共享變數,因此不會出現執行緒不安全,但是對於sum,有兩條語句使用的,所以就會出現執行緒安全問題,

解決辦法,同步塊

object obj = new object();

public void add(int n)

}

或者,同步函式

public synchronized void add(int n) 

以上就是執行緒安全的解決辦法,同步機制雖然遊俠,但是帶來了一定的效能損耗,所以,對操作共享資料的部分執行同步,儘量減少這種損耗

補充:如果同步函式是靜態的,那麼使用的鎖就必須是所在類的位元組碼檔案物件,也就是 類名.class,解釋來說,靜態是和類一起載入的,所以在靜態載入的時候是不可能有object的物件,所以鎖就必須用在靜態加在之前的乙個物件.

多執行緒 執行緒安全問題簡單分析

有看過有人買火車票,乙個人在飛豬買,乙個人在12306買,買到了同一張票。也有看到過,庫存中已經沒貨了但是仍然賣出去了。超買,超賣,秒殺等問題就是執行緒安全問題。多個執行緒操作同乙個共享變數。為 a b c a處有判斷,b處有相關業務,c處有共享變數資料改變。在某個時間,有三個執行緒 1 執行緒1首...

多執行緒 執行緒安全

原因 當多個執行緒同時共享,同乙個全域性變數或靜態變數。做寫的操作時,可能發生資料衝突問題,也就是執行緒安全問題。但是做讀操作是不會發生資料衝突問題。解決方案 方式一 內建鎖synchronized synchronized保證執行緒原子性,當執行緒進入方法的時候,自動獲取鎖,一旦鎖被其它執行緒獲取...

多執行緒 執行緒安全

public class unsafethread t.start while thread.activecount 1 system.out.println sum 1 從主記憶體中講sum變數複製到執行緒的工作記憶體 2 在工作記憶體中修改變數 1操作 3 將sum變數從執行緒的工作記憶體寫回到...