14 Java多執行緒 併發安全

2021-09-24 15:19:14 字數 748 閱讀 1355

三、如何做到執行緒安全?

四、執行緒不安全引起的問題

4.2 活鎖

4.3 執行緒飢餓

五、效能和思考

六、鎖優化

七、單例模式

八、小結

4.1.1 死鎖的條件

條件描述

資源競爭

競爭資源一定大於1個,且小於競爭的執行緒數量

不可剝奪

獲得資源後不可剝奪,只能由執行緒自己釋放

資源獨佔

資源被執行緒獲取後,不能被其他執行緒獲取

迴圈等待

執行緒獲取部分資源且等待其他資源的過程中,不會釋放已持有資源

jps -m : 檢視執行緒id

jstack 執行緒id : 檢視鎖的持有情況

4.1.2 解決死鎖

4.1.3 動態順序死鎖

比如時刻t1發生a轉賬給b ,傳參是(a,b),方法先在t2時刻給a加鎖,再在t3時刻給b加鎖,

比如時刻t1發生b轉賬給a ,傳參是(b,a),方法先在t2時刻給b加鎖,再在t3時刻給a加鎖,

如果整個時序是下面這樣的,那就會死鎖

t1 ---> t1 ---> t2 ---> t2 --->(死鎖)---> t3 ---> t3

4.1.4 解決動態順序死鎖
speedup <= 1/(f+ (1-f)/n )
5.2.1 上下文切換

5.2.2 記憶體同步

5.2.3 阻塞

1 4 Java控制語句

1.順序結構 2.判斷結構 if 條件表示式 執行語句是單條語句時,大括號可以省略。for也一樣 乙個if整體就相當於乙個單條語句。單條語句一般以分號或者大括號結束。if 條件表示式 else 執行語句1,2只會而且肯定會執行乙個。三元運算子?就是if else 語句的簡寫格式 當if else 運...

多執行緒 安全併發

同乙個,同時,多個 則執行緒會不安全 synchronized鎖物件,不是鎖方法 目標不對鎖定失敗,選好要鎖的物件,不是提款機,是提款人 public synchronized void test public void run 顧客 static class customer implements...

(多執行緒)多執行緒的併發安全

多執行緒併發操作同乙個資源 同步鎖 多執行緒操作的鎖必須唯一 必須搞清楚 哪些 需要同步?那些在操作共享資源的 只要包含非讀的操作,或者根據共享資源進行條件判斷的,就需要同步!同步 塊解決 package com.gc.thread 多執行緒操作共享資源 併發 執行緒安全問題 同步 鎖 相對而言效能...