Immutable Pattern的關鍵在于共享資源是immutable(不會改變的)。即在實例產生后,沒有改變字段的方法了,即只有只讀的方法(所有的方法都是safeMethod),那么任何線程對共享資源的訪問就不可造成沖突了。就算想破壞這個共享資源都沒有辦法,呵呵。 String類就是Immutable Pattern的典型。String類沒有提供任何改變字符串屬性的方法。當然就是Immutable Pattern了。 從代碼上來看,Immutable Pattern的形式如下:

class A{ 
    public void safeMethod1(){} 
    publi c void safeMethod2(){} 
} 

由于沒有用到synchronized關鍵字,那么訪問共享資源的效率是很高的。在某些情況下,如果某個共享資源用到了synchronized關鍵字,即不是immtable。那么,可以根據這個類的具體用處,分為兩個類,一個是immutable,另一個是mutable(可變的),如果這兩個類可以互相轉化,那么在不同的場合用不同的類就可以提高程序的效率了。Java中對字符串這個共享資源提供了兩個類:String類和StringBuffer類。他們就是對應的immutable和mutable,兩者可以通過構造函數(String有個構造函數的參數是StringBuffer,StringBuffer有個構造函數的參數String)轉化。

參考: 《Java多線程設計模式》,中國鐵道出版社,2005,結城浩


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