Immutable Pattern的關(guān)鍵在于共享資源是immutable(不會改變的)。即在實例產(chǎn)生后,沒有改變字段的方法了,即只有只讀的方法(所有的方法都是safeMethod),那么任何線程對共享資源的訪問就不可造成沖突了。就算想破壞這個共享資源都沒有辦法,呵呵。 String類就是Immutable Pattern的典型。String類沒有提供任何改變字符串屬性的方法。當(dāng)然就是Immutable Pattern了。 從代碼上來看,Immutable Pattern的形式如下:
class A{
public void safeMethod1(){}
publi c void safeMethod2(){}
}
由于沒有用到synchronized關(guān)鍵字,那么訪問共享資源的效率是很高的。在某些情況下,如果某個共享資源用到了synchronized關(guān)鍵字,即不是immtable。那么,可以根據(jù)這個類的具體用處,分為兩個類,一個是immutable,另一個是mutable(可變的),如果這兩個類可以互相轉(zhuǎn)化,那么在不同的場合用不同的類就可以提高程序的效率了。Java中對字符串這個共享資源提供了兩個類:String類和StringBuffer類。他們就是對應(yīng)的immutable和mutable,兩者可以通過構(gòu)造函數(shù)(String有個構(gòu)造函數(shù)的參數(shù)是StringBuffer,StringBuffer有個構(gòu)造函數(shù)的參數(shù)String)轉(zhuǎn)化。
參考: 《Java多線程設(shè)計模式》,中國鐵道出版社,2005,結(jié)城浩
文章來源:http://localhost/wp2/?p=75