ThreadLocal

线程局部变量
是一种多线程间,并发访问变量的解决方案

与synchronized等加锁的不同
ThreadLocal完全不提供锁,使用以空间换时间的手段
为每个线程提供变量的独立版本,以保障线程安全

性能
ThreadLocal不具有绝对的优势
在并发不是很高的时候,加锁的性能会更好

作为一套与锁完全无关的线程安全解决方案
在高并发量,或者竞争激烈的场景
使用ThreadLocal可以在一定程度上减少锁竞争

package com.bjsxt.base.conn010;public class ConnThreadLocal {public static ThreadLocal<String> th = new ThreadLocal<String>();public void setTh(String value) {th.set(value);}public void getTh() {System.out.println(Thread.currentThread().getName() + ":" + this.th.get());}public static void main(String[] args) throws InterruptedException {final ConnThreadLocal ct = new ConnThreadLocal();Thread t1 = new Thread(new Runnable() {@Overridepublic void run() {ct.setTh("张三");ct.getTh();}}, "t1");Thread t2 = new Thread(new Runnable() {@Overridepublic void run() {try {Thread.sleep(1000);ct.getTh();} catch (InterruptedException e) {e.printStackTrace();}}}, "t2");t1.start();t2.start();}}

运行

ThreadLocal的使用相关推荐

  1. FastThreadLocal吞吐量居然是ThreadLocal的3倍

    目前关于FastThreadLocal的很多文章都有点老有点过时了(本文将澄清几个误区),很多文章关于FastThreadLocal介绍的也不全,希望本篇文章可以带你彻底理解FastThreadLoc ...

  2. 正确理解ThreadLocal

    详见:http://blog.yemou.net/article/query/info/tytfjhfascvhzxcyt107 首先,ThreadLocal 不是用来解决共享对象的多线程访问问题的, ...

  3. 什么是ThreadLocal

    顾名思义它是local variable(线程局部变量).它的功用非常简单,就是为每一个使用该变量的线程都提供一个变量值的副本,使每一个线程都可以独立地改变自己的副本,而不会和其它线程的副本冲突.从线 ...

  4. 为什么jdk源码推荐ThreadLocal使用static

    ThreadLocal是线程私有变量,本身是解决多线程环境线程安全,可以说单线程实际上没必要使用. 既然多线程环境本身不使用static,那么又怎么会线程不安全.所以这个问题本身并不是问题,只是有人没 ...

  5. Spring源码分析【6】-ThreadLocal的使用和源码分析

    Spring代码使用到了ThreadLocal java.lang.ThreadLocal.set getMap java.lang.Thread.threadLocals定义 回到set 如果map ...

  6. threadlocal使用场景_深入剖析ThreadLocal

    点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达 朋友们在遇到线程安全问题的时候,大多数情况下可能会使用synchronized关键字,每次只允许一个线程进入锁定的方法或代码块,这样就可以保 ...

  7. ThreadLocal源码分析

    ThreadLocal的作用 Java对象是线程间共享的,但有时我们需要一些线程间隔离的对象,该对象只能由同一个线程读写,对其他线程不可见.ThreadLocal正式提供了这样的机制,详细使用方式请参 ...

  8. ThreadLocal的使用场景

    最近项目中遇到如下的场景:在执行数据迁移时,需要按照用户粒度加锁,因此考虑使用排他锁,迁移工具和业务服务属于两个服务,因此需要使用分布式锁. 我们使用缓存(Tair或者Redis)实现分布式锁,具体代 ...

  9. ThreadLocal的使用方法

    ThreadLocal的含义是Thread Local Variable,它可以声明一个字段,使得不同的线程访问这个字段时,获取的都是不同的副本,互不影响. ThreadLocal的作用和在每个Thr ...

  10. PageHelper 使用 ThreadLocal 的线程复用问题

    欢迎关注方志朋的博客,回复"666"获面试宝典 来源:https://blog.csdn.net/qq_38245668/article/details/105984171/ 前言 ...

最新文章

  1. mysql system命令_mysql命令
  2. 系统时间大全,待整理
  3. 设置css3动画的顺序,CSS3 “瓷砖”顺序飘落的动画
  4. python字典的特点是什么_Python中dict的特点
  5. 一个墙纸还可以改变使用裁剪工具改变图像
  6. Ribbon-4 Ribbon脱离Eureka使用
  7. maven打jar包pom配置
  8. 华为云云容器快速搭建网站实践随记—利用私有镜像搭建GuestBook
  9. 数据3分钟丨​俄罗斯金融监控局4.6亿卢布招标国产数据库;Meta被欧盟罚款1900万美元;达观数据和天云数据分获数亿元融资...
  10. 【codevs1068】乌龟棋noip10年TG----第二个A掉的钻石题
  11. 手把手带你深入解析静态分派 动态分派原理 | 原力计划
  12. linux内存源码分析 - 伙伴系统(初始化和申请页框)
  13. Python实现IP地址归属地查询
  14. Logistics人口模型
  15. Flask开发 导入flask_uploads包时提示“IMPORTERROR: CANNOT IMPORT NAME ‘SECURE_FILENAME‘ FROM ‘WERKZEUG‘“
  16. 8-2SpringDataJpa
  17. 天融信EDR或企业安全终端卸载需要密码解决办法
  18. SSH远程访问以及控制
  19. linux 移除用户所在的组,Linux用户及用户组添加和删除操作
  20. BlockingQueue

热门文章

  1. 第二阶段团队项目冲刺第七天
  2. 快速了解上市公司年报
  3. 理解Linux系统中的load average(图文版)转载
  4. php获取上传多个文件缺失
  5. C++中特定宏_FUNCTION_
  6. 新手第一课-什么是深度学习
  7. java商品展示页面代码_java学习(十四)实现商品的展示、curd以及分页展示
  8. 区块链BaaS云服务(28)TOP Network 之P2P 网络
  9. C++ Primer 5th笔记(6)chapter6 函数: 重载
  10. BUUCTF crackMe