上一章讲的是线程互斥的synchronized实现,这样做会影响性能,如何才能做到既不影响性能又能达到线程安全的目的呢,就是使用状态绝不会改变的类,Java中的应用就是String类。
public class ImmutableThreadTest { /** * @param args */ public static void main(String[] args) { Person p = new Person("Alice", "Alaska"); new PrintPersonThread(p).start(); new PrintPersonThread(p).start(); } } class PrintPersonThread extends Thread{ private Person person; public PrintPersonThread(Person person){ this.person = person; } @Override public void run() { while(true){ System.out.println(Thread.currentThread().getName() + " Prints " + person); } } } final class Person{ private final String name; private final String address; public Person(String name, String address){ this.name=name; this.address=address; } public String getName() { return name; } public String getAddress() { return address; } @Override public String toString() { return "[person:name=" + name + ", address=" + address + "]"; } }
这个模式很简单,就是将对象的所有字段都设为final的,这样就只有在构造的时候初始化一次,以后都是只读状态,当一个类不需要修改对象内变量时,可以使用Immutable模式。