Single Threaded Execution模式的核心就是single,即某個共享資源同時只能被某一個線程訪問??梢宰鋈缦卤扔鱽砝斫膺@個模式:門(共享資源),人(線程)。一個門一次只能由一個人通過。如果一個人正在通過這個門,那么其他人只能等待了。 當然,共享資源中某些方法是線程安全的(SafeMethod),就不用考慮多個線程同時調用的情況了。只有對不安全的方法(UnsafeMethod)才需要考慮多線程訪問的問題。 可以對Single Thread Execution模式這樣理解:如果另外的線程也行執行被保護的UnsafeMethod,那么就需要判斷是否有其他線程正在執行被保護的UnsafeMethod。如果有,則等待;沒有,則執行。 對Single Threaded Execution Pattern來說,代碼的典型表現形式就是對所有的UnsafeMethod方法加上synchronized關鍵字。如:

class A{ 
    public void safeMethod(){ } 
    public synchronized void unsafeMethod1(){ } 
    publi synchronized void unsafeMethod2(){ } 
}

當下面的情況發生時,可能會出現死鎖

  1. 有多個共享資源
  2. 線程鎖定了一個共享資源,但還沒有解除鎖定就鎖定了另外一個共享資源
  3. 各個線程獲取共享資源的順序不固定

也就是說,打破上面的三個情況的任何一個,就可以避免死鎖的發生。 參考: 《Java多線程設計模式》,中國鐵道出版社,2005,結城浩


文章來源:http://localhost/wp2/?p=70