Java中的ThreadLocal学习理解

=Start=

缘由:

前段时间在用Java进行加解密的时候碰到了一个线程安全的问题,后来发现是因为对Java的Cipher包不熟悉导致,最后通过ThreadLocal的方式在正确性和性能上取得了一个平衡。

虽然问题是解决了,但是ThreadLocal是什么,以及为什么能解决这个问题我还不是特别清楚,所以就想专门学习一下ThreadLocal的相关知识,因为整体不算复杂,所以在收集、整理的过程中也就完成了相关知识的学习和介绍。

正文:

参考解答:
# ThreadLocal 是什么?

ThreadLocal是一个关于创建线程局部变量的类。ThreadLocal,很多地方叫做线程本地变量,也有些地方叫做线程本地存储,其实意思差不多。可能很多朋友都知道ThreadLocal为变量在每个线程中都创建了一个副本,那么每个线程可以访问自己内部的副本变量。

通常情况下,我们创建的变量是可以被任何一个线程访问并修改的。而使用ThreadLocal创建的变量只能被当前线程访问,其他线程则无法访问和修改。

如何验证 threadLocal 确实是每个线程都创建了一个各自的副本?

# threadLocal 何时用?怎么用?
  • 最常见的ThreadLocal使用场景是用来解决数据库连接、Session管理等问题。
  • 还有就是密码算法中的 init 初始化操作,因为Java中的Cipher不是线程安全的,但是 init 又非常慢,所以比较适合。
# threadLocal 使用的注意事项?

1、先 set 再 get 否则可能会出异常,或者通过重写 initialValue 方法来避免此问题;

 

参考链接:

=END=

声明: 除非注明,ixyzero.com文章均为原创,转载请以链接形式标明本文地址,谢谢!
https://ixyzero.com/blog/archives/4051.html

发表评论

电子邮件地址不会被公开。 必填项已用*标注