为什么';t ThreadLocal使用java.util.HashMap存储值,但要自定义值吗?
我正在阅读java.lang.ThreadLocal的源代码,我有两个问题,如下所示为什么';t ThreadLocal使用java.util.HashMap存储值,但要自定义值吗?,java,Java,我正在阅读java.lang.ThreadLocal的源代码,我有两个问题,如下所示 为什么ThreadLocal不使用java.util.HashMap来存储值,而是自定义值 为什么在ThreadLocal中定义ThreadLocalMap是静态的?如果不是静态的,它怎么可能是静态的 查看最早的JDK1.2源代码,代码上的日期显示ThreadLocal早于HashMap * <this is HashMap> * @author Josh Bloch * @autho
查看最早的JDK1.2源代码,代码上的日期显示ThreadLocal早于HashMap
* <this is HashMap>
* @author Josh Bloch
* @author Arthur van Hoff
* @version 1.29, 04/22/99
* @see Object#hashCode()
* @see Collection
* @see Map
* @see TreeMap
* @see Hashtable
* @since JDK1.2
* <this is ThreadLocal>
* @author Josh Bloch
* @version 1.8 07/08/98
* @since JDK1.2
*/
*
*@作者Josh Bloch
*@作者阿瑟·范霍夫
*@version 1.2904/22/99
*@see Object#hashCode()
*@见收藏
*@见地图
*@见树形图
*@见哈希表
*@自JDK1.2以来
*
*@作者Josh Bloch
*@version 1.8 07/08/98
*@自JDK1.2以来
*/
因为是同一个作者,我怀疑他写了一个具体的,后来又取代了一般的。我不知道在此版本之前是否有不同的HashMap实现,但如果有,看起来Josh Bloch不想使用它
此外,它看起来像是通过使用自定义函数(如getEntryAfterMiss
expungeStaleEntry
等)对ThreadLocal
的实现进行了优化。因此,尽管稍后会有另一个对一般情况有利的映射实现,但您已经有了这种高度自定义的映射实现
至于你的第二个问题,.我查看了JDK1.2源代码,因为这些类之前并不存在(根据API),难道
@version
日期不是指定版本的创建日期吗?如果是这样,它不会告诉我们任何关于HashMap
的1.0版是何时创建的,以及它是在ThreadLocal
的1.0版之前还是之后。只是想一想,当然。这是非常间接的证据。我对所发生的事情有一个假设,我找到的证据支持这个假设,而不是反驳它。(但无法证明)我打赌我们可以找到乔希,然后问他:-)