Java从遗忘到入门——Day07

ThreadLocal

众所周知ThreadLocal是在线程内部的变量,可有的时候在代码中依然会混淆它的值,比如以下代码:

public class Test {
    static ThreadLocal<Integer> threadLocal = new ThreadLocal<>();

    static class MyTest implements Runnable {
        MyTest() {
            threadLocal.set(2);
            System.out.println(Thread.currentThread().getName() + ":" + threadLocal.get());
        }

        @Override
        public void run() {
            System.out.println(Thread.currentThread().getName() + ":" + threadLocal.get());
        }
    }

    public static void main(String[] args) {
        new Thread(new MyTest()).start();
    }
}

答案是:
在这里插入图片描述
可以看到,MyTest的构造函数是属于main线程执行的,run方法的输出是Thread-0执行的,两个线程中保存的是两个不同的ThreadLocal值。

在分析ThreadLocal的值的时候要分析线程的起点。

今天博主很懒,就写这么多

发布了41 篇原创文章 · 获赞 9 · 访问量 9840

猜你喜欢

转载自blog.csdn.net/Serena0814/article/details/105102413