多個狀態變數的一致性保持

  • 當執行緒安全的不變性條件中涉及多個變數時,並且各個變數之間不是彼此獨立,某個變數對其他變數的值產生約束。那當更新一個變數時,要在同一個原子操作中更新其他的變數

內建鎖(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();
    }
}