ThreadLocal的几点思考和总结

看了一些ThreadLocal相关分析的文章,总结了如下几点信息,如有错误欢迎指正一起学习:

  1. jdk1.3之前实现方式是不同的,它在ThreadLocal中维护了一个Map,Thread作为key,变量作为值。但是这样多线程并发访问需要进行同步,所以速度比较慢。
  2. 后来,每个Thread各自持有一个ThreadLocalMap变量,那么使用传递进来的变量就不会有同步的问题了,因为每个Thread都存了一份引用,这也成了ThreadLocal的一个演进出来的功能。
  3. ThreadLocalMap里ThreadLocal作为key,传入的对象作为值,这时传入的是对象的引用,而不是new了一个新的对象进来,也就是说,其他线程修改了这个对象的值,其他线程里的值也对应着改变,基本数据类型除外,因为他们不是引用类型。
  4. ThreadLocal并不能解决线程安全的问题,也就是说,脏读的问题依然存在。
  5. 所以,ThreadLocal的主要功能是简化了向线程传参,否则除了将变量定义成static全局可用,无法方便所有的线程访问,而不是用来解决线程安全问题的。
  6. 换句话说,ThreadLocal实现的是数据的隔离,也就是各个线程用各个线程的独立数据。
  7. ThreadLocal不用于数据共享。

猜你喜欢

转载自blog.csdn.net/u013821237/article/details/89925626