本節書摘來自異步社群《代碼整潔之道》一書中的第13章13.6節警惕同步方法之間的依賴,作者【美】robert c. martin,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視。
13.6 警惕同步方法之間的依賴
同步方法之間的依賴會導緻并發代碼中的狡猾缺陷。java語言有synchronized概念,可以用來保護單個方法。然而,如果在同一共享類中有多個同步方法,系統就可能寫得不太正确了[12]。
建議:避免使用一個共享對象的多個方法。
有時必須使用一個共享對象的多個方法。在這種情況發生時,有3種寫對代碼的手段:
基于用戶端的鎖定——用戶端代碼在調用第一個方法前鎖定服務端,確定鎖的範圍覆寫了調用最後一個方法的代碼;
基于服務端的鎖定——在服務端内建立鎖定服務端的方法,調用所有方法,然後解鎖。讓用戶端代碼調用新方法;
适配服務端——建立執行鎖定的中間層。這是一種基于服務端的鎖定的例子,但不修改原始服務端代碼。