1. 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死亡就会自动帮你清空,但在线程池的形况下,并不会死亡,时间久了,就会很危险。
不懈努力,慢慢前行,变成自己喜欢的样子。
之前喜欢在有道云上做笔记,因为只有自己看,所以做的偷懒不好。希望换到简述上可以认真一点。水平不高,如果问题请留言指出,一起探讨。