Java面试题 ThreadLocal
创建时间:2018-01-24 投稿人: 你开心就好 浏览次数:273
只要涉及到多线程,就必然要考虑变量的线程安全。有一种全局变量,多个线程都会对其进行操作,为其安全性我们可以采取synchronized、volatile等方式来处理。
还有一种局部变量,它只存活于线程内部,供线程内的函数使用,与其他线程无关,这就要用ThreadLocal。
线程类
测试类
结果
各个线程内的ThreadLocal变量是相互独立的,互不干扰。
实现方案1
在每一个ThreadLocal类中构建一个Map,以线程ID为Key,具体的值为Value。如图:
A
JDK早期的实现是如此。
实现方案2
每个Thread维护一个ThreadLocalMap,ThreadLocal为Key,具体的值为Value。如图:
B
这样做好处有:
原来要维护一个大Map,有多少个线程,Map里就要有多少个键值对。比如我们有3个ThreadLocal变量,10个线程,如果要获取数据,就要在一个有10个键值对的Map里查找。
现在则是在10个线程里,维护一个只有3个键值对的Map,查找就快了。
Thread运行完毕,销毁后,内部的ThreadLocalMap也会一起销毁,节省内存。
声明:该文观点仅代表作者本人,入门客AI创业平台信息发布平台仅提供信息存储空间服务,如有疑问请联系rumenke@qq.com。
- 上一篇:JVM之CMS收集器与G1收集器知识点整理
- 下一篇:没有了