为什么';t ThreadLocal使用java.util.HashMap存储值,但要自定义值吗?

为什么';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

我正在阅读java.lang.ThreadLocal的源代码,我有两个问题,如下所示

  • 为什么ThreadLocal不使用java.util.HashMap来存储值,而是自定义值
  • 为什么在ThreadLocal中定义ThreadLocalMap是静态的?如果不是静态的,它怎么可能是静态的

  • 查看最早的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版之前还是之后。只是想一想,当然。这是非常间接的证据。我对所发生的事情有一个假设,我找到的证据支持这个假设,而不是反驳它。(但无法证明)我打赌我们可以找到乔希,然后问他:-)