一文搞定ThreadLocal
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相关推荐
- php带参数单元测试_一文搞定单元测试核心概念
基础概念 单元测试(unittesting),是指对软件中的最小可测试单元进行检查和验证,这里的最小可测试单元通常是指函数或者类.单元测试是即所谓的白盒测试,一般由开发人员负责测试,因为开发人员知道被 ...
- 【Python基础】一文搞定pandas的数据合并
作者:来源于读者投稿 出品:Python数据之道 一文搞定pandas的数据合并 在实际处理数据业务需求中,我们经常会遇到这样的需求:将多个表连接起来再进行数据的处理和分析,类似SQL中的连接查询功能 ...
- 一文搞定Swing和Qt按钮和文本框的创建
一文搞定Swing和Qt按钮和文本框的创建 Qt的截图 java的 源码 package com.lujun;import java.awt.Container;import javax.swing. ...
- 一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出
一文搞定C#关于NPOI类库的使用读写Excel以及io流文件的写出 今天我们使用NPOI类库读写xlsx文件, 最终实现的效果如图所示 从太平洋官网下载相应的类库,大概4~5MB,不要从github ...
- 一文搞定Qt读写excel以及qt读写xml数据
一文搞定Qt读写excel以及qt读写xml数据 最终的实现效果图 RC_ICONS = logo.ico .pro文件同级目录下加入 logo.ico 图标文件,运行文件,文件的图标就被写入软件 u ...
- 一文搞定 Spring Data Redis 详解及实战
转载自 一文搞定 Spring Data Redis 详解及实战 SDR - Spring Data Redis的简称. Spring Data Redis提供了从Spring应用程序轻松配置和访问 ...
- 一文搞定面试中的二叉树问题
一文搞定面试中的二叉树问题 版权所有,转载请注明出处,谢谢! http://blog.csdn.net/walkinginthewind/article/details/7518888 树是一种比较重 ...
- 【全网最全】一文搞定 Linux 压缩、解压哪些事儿
一文搞定 Linux 压缩.解压哪些事儿 Linux 常用的解压和压缩命令如下: 1..tar # 解包 tar xvf FileName.tar # 打包 tar cvf FileName.tar ...
- 一文搞定Matplotlib 各个示例丨建议收藏
摘要:Matplotlib 是 Python 的绘图库. 它可与 NumPy 一起使用 ,Matplotlib也是深度学习的常用绘图库,主要是将训练的成果进行图形化,因为这样更直观,更方便发现训练中的 ...
最新文章
- 日本Quoine的ICO平台正式将BCH作为融资货币
- NR 5G NG-RAN 架 构
- 【NLP】Transformer的中年危机?
- Anaconda 下libsvm的安装
- Https原理及流程
- Python切片各种情况详解
- python 窗口函数_太好用了!Python中8种流行的SQL窗口函数了解一下!
- 95-36-100-ChannelHandler-ChannelOutboundHandler
- 相机标定 棋盘格 图_【连载2.3.1】结构光系统标定
- 安装系统跳过创建用户,直接以超级管理员身份进入系统
- shell 中字符串变量处理
- 牛顿法、梯度下降法与拟牛顿法
- 容器编排工具与 Kuberneters
- 虚拟机下 linux 大小写切换失效 Bug(vmware 15.5.5 导致)
- 树的高度单位换算 c语言编辑,单位换算公式大全
- 3.4 利用Pandas进行数据清洗和数据规整化
- B端设计师必不可少的表单设计(上)
- 测试员如何参与需求评审?
- druid 大量sleep连接
- Linux安装Maven、POM及配置文件详解