ThreadLocal数据共享与优雅设计
ThreadLocal用于实现线程内的数据共享,即对于相同的代码,多个模块在同一线程中运行时要共享一份数据,而在另外的线程中运行时又共享另外一份数据.
实现对ThreadLocal变量的封装,让外界不直接操作ThreadLocal变量,一是对基本类型的数据封装,这种应用相对少见,二是对对象类型的数据封装,较常见,即让某个类针对不同线程分别创建一个独立的实例对象.
以下是ThreadLocal常用封装:
class MyThreadScopeData{private MyThreadScopeData(){}public static MyThreadScopeData getThreadInstance(){MyThreadScopeData instance = map.get();if(instance == null){instance = new MyThreadScopeData();map.set(instance);}return instance;}private static ThreadLocal<MyThreadScopeData> map = new ThreadLocal<MyThreadScopeData>();private String name;private int age;public String getName() {return name;}public void setName(String name) {this.name = name;}public int getAge() {return age;}public void setAge(int age) {this.age = age;}}