为什么在ThreadLocal中将ThreadLocalMap设计为静态嵌套类?
  为什么设计ThreadLocalMap作为静态类中ThreadLocal ?  虽然静态和非静态嵌套类在下面有差异。 
嵌套静态类不需要Outer类的引用,但非静态嵌套类或Inner类需要Outer类引用。
内部类(或非静态嵌套类)可以访问Outer类的静态和非静态成员。 静态类不能访问Outer类的非静态成员。 它只能访问Outer类的静态成员。
如果没有外部类的实例,并且Inner类可以引用在其嵌套的Outer类中定义的数据和方法,则不能创建Inner类的实例,因此我们不需要将对象的引用传递给Inner的构造函数类。 出于这个原因,内部类可以使程序简单而简洁。
  首先应该注意的是, ThreadLocalMap是一个包私有类,因此它不是API的一部分,而是一个实现细节,如果需要,它可能在未来的JDK版本中发生变化。 
  为什么它不是非静态的?  仅仅因为非静态嵌套类(内部类)被绑定到外部类的具体实例。  在我们的例子中,它应该绑定到具体的ThreadLocal变量。  这是错误的: ThreadLocalMap绑定到线程并存储给定线程的所有ThreadLocal变量的所有值。  因此将它绑定到具体的ThreadLocal实例是没有意义的。 
  也许让ThreadLocalMap成为Thread类的内部类看起来更合乎逻辑。  然而, ThreadLocalMap只是不需要Thread对象来操作,所以这只会增加一些不必要的开销。  它位于ThreadLocal类中的原因是ThreadLocal负责创建ThreadLocalMap 。  ThreadLocalMap为只有当第一电流线程创建ThreadLocal在这个线程设置,但在此之后同样ThreadLocalMap用于所有其他ThreadLocal变量。 
  另一种方法是将ThreadLocalMap作为java.lang包中的独立包私有类来保存。  这样的选项没什么问题:这只是一个品味的问题,取决于开发人员需要更多的东西:将单个源文件中的相关功能分组,或保持源文件长度更小。 
上一篇: Why design ThreadLocalMap as static nest class in ThreadLocal?
下一篇: Static nested class has full access to private outer class members?
