ThreadLocal

作者: 不知所言bzsy | 来源:发表于2019-07-04 12:11 被阅读0次

1. ThreadLocal是什么?

ThreadLocal是一个类,用来辅助线程的来进行线程内自己存取数据的工具类


ThreadLocal介绍图(理解有误联系我删除)

2. 如何使用

public class ThreadLocalDemo {

    private static ThreadLocal<String> threadLocal1 = new ThreadLocal();
    private static ThreadLocal<Integer> threadLocal2 = new ThreadLocal();

    public static void main(String[] args) {
        //两个线程  一个子线程 一个是 main线程
        new Thread(new Runnable() {
            @Override
            public void run() {
                threadLocal1.set(Thread.currentThread().getName()+":threadLocal1:线程这块多容易啊。。。");
                threadLocal2.set(666666);

                System.out.println(threadLocal1.get());
                System.out.println(threadLocal2.get());
            }
        }).start();

        threadLocal1.set(Thread.currentThread().getName()+":threadLocal1:线程这块难死了");
        threadLocal2.set(999999);

        System.out.println(threadLocal1.get());
        System.out.println(threadLocal2.get());
    }

}

运行结果

main:threadLocal1:线程这块难死了
Thread-0:threadLocal1:线程这块多容易啊。。。
999999
666666
  • 由打印的顺序可见 线程是并发执行的
  • 同样都是调用一个对象的get 方法 获取的值都是不一样的。因为对象内部做了手脚。

3.为什么会这样?

去看看源代码中的get 和 set方法就能理解大部分。(这里不做介绍,还是自己翻翻源代码最好)

4.问题

人们最经常说的就是内存泄漏的问题,所以需要手动的remove一下,虽然Thread死亡就会自动帮你清空,但在线程池的形况下,并不会死亡,时间久了,就会很危险。

不懈努力,慢慢前行,变成自己喜欢的样子。
之前喜欢在有道云上做笔记,因为只有自己看,所以做的偷懒不好。希望换到简述上可以认真一点。水平不高,如果问题请留言指出,一起探讨。

相关文章

网友评论

    本文标题:ThreadLocal

    本文链接:https://www.haomeiwen.com/subject/auylhctx.html