* 用HashMap简单的实现ThreadLocal
*/
import java.lang.ref.WeakReference;
import java.util.HashMap;
import java.util.Map;
import java.util.Random;
import org.junit.Test;
public class MyThreadLocal {
/**
* 用一个弱引用保存value,便于线程结束后垃圾回收器的回收
*/
private static Map<Thread,WeakReference<Integer>> map=new HashMap<Thread,WeakReference<Integer>>();
public static Integer getNum(){
//第一次先得WeakReference
WeakReference<Integer> refer=map.get(Thread.currentThread());
if(refer==null){
//若为空,得到一个随机数,用这个随机数创建一个WeakReference对象,作为value存入map
Random random=new Random();
int number = random.nextInt(100);
refer=new WeakReference<Integer>(number);
map.put(Thread.currentThread(),refer );
}
//返回weakReference里保存的number
return refer.get();
}
/**
*以下是测试代码
*/
public static void main(String[] args) {
Integer num1 = MyThreadLocal.getNum();
Integer num2 = MyThreadLocal.getNum();
System.out.println(num1+":::"+num2);
new Thread(){
@Override
public void run() {
Integer num3 = MyThreadLocal.getNum();
Integer num4 = MyThreadLocal.getNum();
System.out.println(num3+":::"+num4);
}
}.start();
}
}