ThreadLocalデータ共有と優雅な設計


ThreadLocalはスレッド内のデータ共有を実現するために用いる、すなわち、同じコードに対して複数のモジュールが同一スレッドで実行する場合は1部のデータを共有し、別のスレッドで実行する場合は別のデータを共有する.
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;
	}
}