• 刘丹
    2019-10-02
    如果写个Thread类,加个非静态的成员变量,那么这个成员变量的值在不同线程之间也是隔离的。这不就是ThreadLocal的作用吗?感觉ThreadLocal的实现比较复杂,业务上也无不一定要使用。

    作者回复: 这个隔离只是说线程在执行的时候会有自己的缓存,迟早会和主存的数据做同步的。这种缓存不是程序可以控制的,程序层面更不能加以利用。

    
    
  • therealsonofsun
    2019-09-30
    老师,为什么PHASES和PHASE_START_TIME都设为null了,最后结果还能有数据输出呢?这点没想通欸,先谢谢老师的解答 :)

    代码如下:
        public static void finish() {
            List<Phase> phases = PHASES.get();
            PHASES.set(null);
            PHASE_START_TIME.set(null);

            //PHASES和PHASE_START_TIME都设为null了,为什么下面还能有数据输出呢?
            StringBuilder out = new StringBuilder("-----Thread Execution Phase Durations---------");
            phases.forEach(out::append);
            out.append("--------------------------\n");
            System.out.println(out.toString());
        }
    展开

    作者回复:
    先取出了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。

    
    
我们在线,来聊聊吧