线程模式
模式是对前人大量编码形式的总结,学习各种编程模式可以让我们更高效的进行项目编码
Immutable模式
在多线程的程序中,往往有存在一些公共资源,多个线程可以同时对该资源进行读取操作并且保证资源中的值不发生任何改变,这样的类我们就成为使用了Immutable模式的类。
如果该资源是可以被改变的,那么多线程在对资源执行写操作时就会发生不可预料的结果。
Java中已经实现immutable模式的类有 String 类,而StringBuffer正好是反例。
示例:
public class Person {//允许同时访问的共享资源类
private final String name;
private final String address;
public Person(String n,String a){
name=n;
address=a;
}
public String getName() {
return name;
}
public String getAddress() {
return address;
}
public String toString(){
return "[person:name="+name+",address="+address+"]";
}
}
public class WorkerThread extends Thread {//多线程访问者
private Person person;
public WorkerThread(Person p){
person=p;
}
public void run(){
while(true){
System.out.println(Thread.currentThread().getName()+" prints "+person);
}
}//线程的访问并不会影响资源的状态,这里仅仅将其打印出来
}
public static void main(String[] args){
System.out.println("Testing Immutable,hit CTRL+C exit!");
Person p=new Person("Alice","Alaska");
new WorkerThread(p).start();
new WorkerThread(p).start();
new WorkerThread(p).start();
}