BAT面试必考:ThreadLocal,ThreadLocalMap 和Thread 的关系
引言 这三种的关系由于大量的内部类的关系,第一次看的时候还是有点绕的,感觉你是老子的孙子,又是老子的老子。我还是建议你先抛开内部类的关系,把每一个类当作普通类来看到,理解每個类的职责,最后再把内部类放进去考虑这样设计的目的。这里也给大家一个启示,面对复杂的事情的时候,我们需要跳出来,先把问题简单化,大方向把握了,再进一步去细化每一个功能点和设计的艺术。 关系图解 接下来我们看下面一张图 从上图我们可以发现Thread 中持有一个ThreadLocalMap ,这里你可以简单理解为就是持有一个数组,这个数组是Entry 类型的。 Entry 的key 是ThreadLocal 类型的,value 是Object 类型。也就是一个ThreadLocalMap 可以持有多个ThreadLocal。他们是一对多的关系(当然Entry 还涉及到弱引用的技术,这里不展开,不然就没完没了了) 加上内部类的关系 为什么ThreadLocalMap 设计为ThreadLocal 内部类 看到各种内部类是不是有点晕,感觉你是老子的孙子,又是老子的老子,为什么不独立ThreadLocalMap 出来呢?其实这里涉及到内部类起到封装的作用。来,我们看看源码的解析 主要是说明ThreadLocalMap 是一个线程本地的值,它所有的方法都是private 的,也就意味着除了ThreadLocal 这个类