package onlyfun.caterpillar;
import java.util.*;
public class ThreadLocal<T> {
// 取得一個同步化的Map物件
private Map<Thread, T> storage =
Collections.synchronizedMap(new HashMap<Thread, T>());
public T get() {
// 取得目前執行get()方法的執行緒
Thread current = Thread.currentThread();
// 根據執行緒取得執行緒自有的資源
T t = storage.get(current);
// 如果還沒有執行緒專用的資源空間
// 則建立一個新的空間
if(t == null &&
!storage.containsKey(current)) {
t = initialValue();
storage.put(current, t);
}
return t;
}
public void set(T t) {
storage.put(Thread.currentThread(), t);
}
public T initialValue() {
return null;
}
}