1,Immutable表示不可变,从名字上看就是无论有多少线程操作同一个共享资源,都不能改变该资源的状态。
2,适用范围,对于初始化一次就不允许修改的资源可以采用该模式,由于共享资源不可变,所以即使在多线程的情况下也不需要使用Synchronized来保护共享资源,由于不存在线程阻塞和等待,从而达到提高访问性能的效果。
3,实现方法,在构造函数初始化共享资源,共享资源用final和private修饰,并且不提供任何修改共享资源的方法,只提供访问共享资源方法。
4,源码
1)定义一个共享资源保护类,在该类的构造函数初始化共享资源,共享资源被初始化后就不能再修改
package immutable.study; public class Protection { private final int sharedResource; public Protection() { sharedResource=100; } public void read() { System.out.println("Thread name:"+Thread.currentThread().getName()+",sharedResource value:"+sharedResource); } }
2)利用多线程去访问共享资源,由于该资源不能被修改,即使没有Synchronized来保护共享资源,每条线程的结果都是一样的
package immutable.study; public class Immutable { public static void main(String[] args) { Protection protection=new Protection(); Thread thead1=new Thread( new Runnable() { @Override public void run() { protection.read(); } } ); Thread thead2=new Thread( new Runnable() { @Override public void run() { protection.read(); } } ); Thread thead3=new Thread( new Runnable() { @Override public void run() { protection.read(); } } ); thead1.start(); thead2.start(); thead3.start(); } }
3)运行结果
Thread name:Thread-0,sharedResource value:100
Thread name:Thread-1,sharedResource value:100
Thread name:Thread-2,sharedResource value:100