1 基本使用

1.1 常用方法

方法 描述
ThreadLocal() 创建ThreadLocal对象
pubic void set(T value) 设置当前线程绑定的局部变量
public T get() 获取当前线程绑定的局部变量
public void remove() 移除当前线程绑定的局部变量

1.2 ThreadLocal类与synchronize关键字

Demo案例:

synchronize(Deme.class){//具体业务逻辑(setter/getter方法)
}

区别::尽管ThreadLocal与synchronize都用于处理多线程并发访问,但是两者处理问题的方法与思路不同。

synchronize ThreadLocal
原理 同步机制采用“时间换空间” 的方式 ,只提供了一份变量,让不同的线程排队访问 ThreadLocal采用“空间换时间”的方式,为每个线程都提供了一份变量的空间,从而实现同时访问而互不相干扰
侧重点 多个线程之间访问资源的同步性 多线程中每个线程之间的数据相互隔离

总结:synchronize是线程同步,而ThreadLocal是线程之间独立,互不影响,在多线程并发的场景下可以使用。

2 ThreadLocal源码解析

2.1 JDK8中的源码


ThreadLocal的设计:每个Thread维护一个ThreadLocalMap,这个Hash表的key是TheadLocal实例本身,value才能使真正要存储的值为Object类型。
(1)每个Thread线程内部都有一个Map(ThreadLocalMap),
(2)Map里面存储ThreadLocal对象(key)和线程的变量值(value)
(3)Thread内部的Map是由ThreadLocal维护的,有ThreadLocal负责向Map获取和设置线程的变量值
(4)对于不同的线程,每次获取value值时,别的线程并不能获取到当前线程的value值,形成了value值的隔离,互不相干扰。
优点:
(1)这样设计之后每隔Map存储的Entry数量就会变少,因为之前的存储数量有Thread的数量决定,现在是有ThreadLocal的数量决定。
(2)当Thread销毁之后,对应的ThreadLocalMap也会随之销毁,能较少内存的使用。

一文搞定ThreadLocal相关推荐

  1. php带参数单元测试_一文搞定单元测试核心概念

    基础概念 单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常是指函数或者类.单元测试是即所谓的白盒测试,一般由开发人员负责测试,因为开发人员知道被 ...

  2. 【Python基础】一文搞定pandas的数据合并

    作者:来源于读者投稿 出品:Python数据之道 一文搞定pandas的数据合并 在实际处理数据业务需求中,我们经常会遇到这样的需求:将多个表连接起来再进行数据的处理和分析,类似SQL中的连接查询功能 ...

  3. 一文搞定Swing和Qt按钮和文本框的创建

    一文搞定Swing和Qt按钮和文本框的创建 Qt的截图 java的 源码 package com.lujun;import java.awt.Container;import javax.swing. ...

  4. 一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出

    一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出 今天我们使用NPOI类库读写xlsx文件, 最终实现的效果如图所示 从太平洋官网下载相应的类库,大概4~5MB,不要从github ...

  5. 一文搞定Qt读写excel以及qt读写xml数据

    一文搞定Qt读写excel以及qt读写xml数据 最终的实现效果图 RC_ICONS = logo.ico .pro文件同级目录下加入 logo.ico 图标文件,运行文件,文件的图标就被写入软件 u ...

  6. 一文搞定 Spring Data Redis 详解及实战

    转载自  一文搞定 Spring Data Redis 详解及实战 SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问 ...

  7. 一文搞定面试中的二叉树问题

    一文搞定面试中的二叉树问题 版权所有,转载请注明出处,谢谢! http://blog.csdn.net/walkinginthewind/article/details/7518888 树是一种比较重 ...

  8. 【全网最全】一文搞定 Linux 压缩、解压哪些事儿

    一文搞定 Linux 压缩.解压哪些事儿 Linux 常用的解压和压缩命令如下: 1..tar # 解包 tar xvf FileName.tar # 打包 tar cvf FileName.tar ...

  9. 一文搞定Matplotlib 各个示例丨建议收藏

    摘要:Matplotlib 是 Python 的绘图库. 它可与 NumPy 一起使用 ,Matplotlib也是深度学习的常用绘图库,主要是将训练的成果进行图形化,因为这样更直观,更方便发现训练中的 ...

最新文章

  1. 日本Quoine的ICO平台正式将BCH作为融资货币
  2. NR 5G NG-RAN 架 构
  3. 【NLP】Transformer的中年危机?
  4. Anaconda 下libsvm的安装
  5. Https原理及流程
  6. Python切片各种情况详解
  7. python 窗口函数_太好用了!Python中8种流行的SQL窗口函数了解一下!
  8. 95-36-100-ChannelHandler-ChannelOutboundHandler
  9. 相机标定 棋盘格 图_【连载2.3.1】结构光系统标定
  10. 安装系统跳过创建用户,直接以超级管理员身份进入系统
  11. shell 中字符串变量处理
  12. 牛顿法、梯度下降法与拟牛顿法
  13. 容器编排工具与 Kuberneters
  14. 虚拟机下 linux 大小写切换失效 Bug(vmware 15.5.5 导致)
  15. 树的高度单位换算 c语言编辑,单位换算公式大全
  16. 3.4 利用Pandas进行数据清洗和数据规整化
  17. B端设计师必不可少的表单设计(上)
  18. 测试员如何参与需求评审?
  19. druid 大量sleep连接
  20. Linux安装Maven、POM及配置文件详解

热门文章

  1. 基于JSP的网上书店的设计
  2. 神经网络预测彩票数据
  3. 2020信息技术新工科产学研联盟师资培训班开始报名!
  4. 【转】考试心得:MBA联考220分之心得
  5. web扫描姿势——xray被动扫描
  6. 线上问题排查思路总结
  7. Python实现信息连续发送(键盘版)
  8. 相似检索/去重场景下MinHash-LSH及MinHash LSH Forest的Python实现
  9. Instrusive 【HDU - 5040】【2014 北京 BFS】
  10. hdfs的文件权限验证