/** * 用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(); } }