PDF 课件和源代码下载地址:
https://gitee.com/geektime-geekbang/LetsJava
作者回复: 先取出了list List<Phase> phases = PHASES.get(); 然后set为null PHASES.set(null); PHASE_START_TIME.set(null); 并不会影响已经取出来的phases。 就好像 int a = 9; int b = a; a = 0; b并不是0,还是9。
作者回复: thread local 只能在当前进程有用。分布式环境或者别的进程里都没用的
作者回复: 😄
作者回复: 看你自己搞定啦👍
作者回复: 你要的在这里 public static void reset() { PHASES.set(new ArrayList<>()); PHASE_START_TIME.set(-1L); }
作者回复: 没什么不同,final修饰变量都是表示不能二次赋值。
作者回复: 这个隔离只是说线程在执行的时候会有自己的缓存,迟早会和主存的数据做同步的。这种缓存不是程序可以控制的,程序层面更不能加以利用。