HashMap简单的实现ThreadLocal

/**  * 用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();  } } 
相关文章
相关标签/搜索