你知道Java中final和static修饰的变量是在什么时候赋值的吗?

我们先分析一下这个问题:深入Java虚拟机有一句是“ConstantValue属性的作用是通知虚拟机自动为静态变量赋值,只有被static关键字修饰的变量才可以使用这项属性。但为什么private final a = 10也可以被赋值?”我翻阅了《深入理解Java虚拟机》第二版,在第191页,确实有前面那句话
 JVM
  

ThreadLocal到底是个啥?

首先,我们站在人类认知事物的角度,ThreadLocal,可以拆成Thread+Local。Thread—线程;local—本地的,局域的。拼在一起就是线程局域的。线程私有的。 OK,如果你想到了这一点,其实你已经知道了ThreadLocal的最大特点——线程私有。这种理解是对的,ThreadLocal类顾名思义可以理解为线程本地变量。也就是说如果定义了一个ThreadLocal,每个线程往这个ThreadLocal中读写是线程隔离,互相之间不会影响的。它提供了一种将可变数据通过每个线程有自己的独立副本从而实现线程封闭的机制。