Java并发编程基础-ThreadLocal

本文详细介绍了ThreadLocal类的使用方法及原理,包括如何创建线程本地变量、设置与获取变量值等,并阐述了其如何实现线程安全。
  1. 介绍
    ThreadLocal是一个基础类,用来提供线程本地变量,从而保证线程安全。

  2. 用法

    1. 创建,需要提供变量类型

      ThreadLocal<T> threadLocal = new ThreadLocal<>();
    2. 设置值,将变量值存储在当前线程中

      threadLocal.set(T value)
    3. 获取值,获取当前线程中变量值

      threadLocal.get()
    4. 清空值,清空当前线程中变量值

      threadLocal.remove();
    5. 初始值,获取线程中变量的初始值,一般为null

      threadLocal.initialValue();
  3. 原理
          用一张图来简单说明ThreadLocal内的运转机制,如下图所示。

    71f292bd7014c5909f0b58939b7b2f88c40.jpg

          如图所示,当线程通过ThreadLocal对象操作线程本地变量时,实际上是通过ThreadLocalMap对象,ThreadLocal在内部只是维护了一个ThreadLocalMap对象引用,ThreadLocalMap对象仍存储在当前线程中。
          ThreadLocalMap对象中key为ThreadLocal对象,value为线程本地变量值。

  4. 线程安全
          每个线程均维护一个ThreadLocalMap对象(完成初始化后),ThreadLocal的值操作(get\set\remove)均操作当前线程中的ThreadLocalMap对象,因此不存在线程安全问题。

PS:

      ThreadLocal以一种很特殊的方式完成了线程隔离,即在每个线程中都创建一个变量副本,互不干扰。

参考书籍及网址:

  • jdk1.8官方源码

PS:研究基于MAC+Idea+JDK1.8 64位

Keep Calm and Carry on!

转载于:https://my.oschina.net/gordonfor/blog/1929383

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值