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(){ }
}
當下面的情況發生時,可能會出現死鎖
- 有多個共享資源
- 線程鎖定了一個共享資源,但還沒有解除鎖定就鎖定了另外一個共享資源
- 各個線程獲取共享資源的順序不固定
也就是說,打破上面的三個情況的任何一個,就可以避免死鎖的發生。 參考: 《Java多線程設計模式》,中國鐵道出版社,2005,結城浩
文章來源:
http://localhost/wp2/?p=70