吃透Java并发六:ThreadLocal

Posted 吃透Java

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了吃透Java并发六:ThreadLocal相关的知识,希望对你有一定的参考价值。

一、ThreadLocal简介

ThreadLocal 用一种存储变量与线程绑定的方式,在每个线程中用自己的 ThreadLocalMap 安全隔离变量,为解决多线程程序的并发问题提供了一种新的思路。ThreadLocal不是为了解决多线程访问共享变量,而是为每个线程创建一个单独的变量副本,提供了保持对象的方法和避免参数传递的复杂性。它采用采用空间来换取时间的方式,解决多线程中相同变量的访问冲突问题。

在ThreadLocal类中有一个静态内部类ThreadLocalMap(其类似于Map),用键值对的形式存储每一个线程的变量副本,ThreadLocalMap中元素的key为当前ThreadLocal对象,而value对应线程的变量副本,每个线程可能存在多个ThreadLocal。而ThreadLocalMap实例则是在线层Thread类中的成员变量,每一个线程有单独自己的ThreadLocalMap,通过此变量来存储多个ThreadLocal(Key)与其对应的值。

简单介绍一下,下面看一个例子就会明白:

创建两个ThreadLocal变量threadLocal1和threadLocal2,分别在三个线程中把threadLocal变量值为1,2,3,4,5,6 如下代码。

public class MyTest 
   
    

以上是关于吃透Java并发六:ThreadLocal的主要内容,如果未能解决你的问题,请参考以下文章

吃透这10大Java并发编程重点问题,面试官听了也流泪

彻底吃透java函数式编程

带你彻底吃透Java NIO

吃透Kafka六:topic 创建过程

吃透Kafka六:topic 创建过程

3W字吃透:微服务 sentinel 限流 底层原理和实操