使用synchronized要注意的地方

2021-08-28 02:33:52 字數 1211 閱讀 8834

再看 synchronized

乙個執行緒想要執行synchronized**體中的**:

1.嘗試獲得鎖;

2.如果拿到鎖,執行synchronized**體內容:拿不到鎖,這個執行緒就會不斷的嘗試獲得這把鎖,直到拿到為止,會是多個執行緒同時去同時競爭這把鎖(會有競爭問題);

(有個問題是如果搶占鎖的執行緒過多,這樣對cpu的資源消耗極大,所以要避免多個執行緒同時競爭一把鎖,可以將sleep的時間隨機數量)

這裡有乙個示例:

執行結果:

明顯已經在testprintnum()方法上加上了synchronized關鍵字,但是執行結果顯示是最終依然是非同步執行的**。第乙個執行緒攜帶著引數「a」進入方法後,第二個執行緒同樣也攜帶著「b」進入了方法。

這是因為這個方法是非static的,也就是說相當於是加的物件鎖,而我們在實際執行的時候new了兩個synctest物件,所以這個時候synchronized失效了,解決方法是可以講synchronized的方法設定為static的,這樣相當於是類級別的鎖。

再看看下面這個例子:

執行結果:

兩個方法是非同步執行的,因為第二個方法沒有被synchronized修飾,是不需要獲得鎖的。如果給第二個方法加上synchronized關鍵字,那麼兩個方法就會同步執行,因為這個時候synchronized是物件鎖,第二個方法需要等待第乙個方法釋放物件鎖。

執行結果:

使用 synchronized指令

使用 synchronized指令 synchronized 指令是在 objective c 中建立乙個互斥鎖非常方便的方法。synchronized 指令做和其他互斥鎖一樣的工作 它防止不同的執行緒在同一時間獲取同乙個鎖 然而在這種情況下,你不需要直接建立乙個互斥鎖或鎖物件。相反,你只需要簡單的...

synchronized使用說明

在併發程式設計中,多執行緒同時併發訪問的資源叫做臨界資源,當多個執行緒同時訪問物件並要求操作相同資源時,分割了原子操作就有可能出現資料的不一致或資料不完整的情況,為避免這種情況的發生,我們會採取同步機制,以確保在某一時刻,方法內只允許有乙個執行緒。採用synchronized修飾符實現的同步機制叫做...

synchronized的使用總結

synchronized的基本使用規則可總結為以下3條。1.當乙個執行緒訪問 某物件 的 synchronized方法 或者 synchronized 塊 時,其他執行緒對 該物件 的該 synchronized方法 或者 synchronized 塊 的訪問將被阻塞。2.當乙個執行緒訪問 某物件 ...