Java併發程式設計實踐筆記之——加鎖機制(Locking)
阿新 • • 發佈:2018-12-31
多個狀態變數的一致性保持
- 當執行緒安全的不變性條件中涉及多個變數時,並且各個變數之間不是彼此獨立,某個變數對其他變數的值產生約束。那當更新一個變數時,要在同一個原子操作中更新其他的變數
內建鎖(Intrinsic Locks)
- Java提供了同步程式碼塊(Synchronized Block)這種內建鎖機制來支援原子性
- 每個Java物件都可以用作一個實現同步的鎖,被稱為內建鎖或者監視鎖
- 內建鎖是一種互斥鎖(mutexes ),這意味著最多隻有一個執行緒能持有這種鎖
- Synchronized 的使用可能過於極端,影響效能,比如使伺服器的併發響應性降低
重入(Reentrancy)
- 內建鎖是可重入的是指:當某個執行緒試圖獲得一個已經由它自己持有的鎖是,這個請求可以成功
- 重入的實現方法是:為每個鎖關聯一個獲取計數器和所有者執行緒
//如果內建鎖不是可重入的,那這段程式碼將發生死鎖 public class Widget{ public synchronized voiddoSomething() { ... } } publicclass LoggingWidget extends Widget { public synchronized voiddoSomething() { System.out.println(toString() +": calling doSomething"); super.doSomething(); } }