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