可以看到ThreadLocal类中的变量只有这3个int型:
ThreadLocal实例的变量只有 threadLocalHashCode ThreadLocal类的静态变量nextHashCode 和HASH_INCREMENT 实际上HASH_INCREMENT是一个常量,表示了连续分配的两个ThreadLocal实例的 threadLocalHashCode值的增量,而nextHashCode 的表示了即将分配的下一个ThreadLocal实例的threadLocalHashCode 的值。 而nextHashCode()方法就是将ThreadLocal类的下一个hashCode值即nextHashCode的值赋给实例的threadLocalHashCode,然后nextHashCode的值增加HASH_INCREMENT这个值。
ThreadLocal有一个ThreadLocalMap静态内部类,你可以简单理解为一个MAP,这个‘Map’为每个线程复制一个变量的‘拷贝’存储其中。 看一下set()方法: 获取当前线程的引用,从map中获取该线程对应的map,如果map存在更新缓存值,否则创建并存储
再来看一下get()方法: 首先获取当前线程引用,以此为key去获取响应的ThreadLocalMap,如果此‘Map’不存在则初始化一个,否则返回其中的变量。 调用get方法如果此Map不存在首先初始化,创建此map,将线程为key,初始化的vlaue存入其中,注意此处的initialValue,我们可以覆盖此方法,在首次调用时初始化一个适当的值,默认是null
我们来看下ThreadLocalMap静态内部类,在ThreadLocalMap 内部的Entry 是WeakReference
posted on 2011-10-29 17:39 胡鹏 阅读(1431) 评论(0) 编辑 收藏 所属分类: java基础 、J2EE