ThreadLocal(避免线程不安全问题)

什么是ThreadLocal?

 线程本地变量,也有些地方叫做线程本地存储,他代表一个线程局部变量。

为什么要ThreadLocal?

如果一段代码中所需要的数据必须与其他代码共享,那就看看这些共享数据的代码能否保证在同一个线程中执行?如果能够保证,我们就可以把共享数据的可见范围限定在同一个线程之内,这样无需同步,也能够保证线程之间不出现数据的争用问题了。

面向的问题是从根本上避免多个线程对共享资源的竞争,是为了隔离多个线程的数据共享,也就不需要对多个线程进行同步了。

通过把数据放在ThreadLocal中就可以让每个线程创建一个该变量的副本。从而避免了并发访问时线程安全的问题了。

private ThreadLocal<String> name = new ThreadLocal<>();

ThreadLocal的应用场景

最常见的ThreadLocal使用场景为 用来解决数据库连接、Session管理等。如:

数据库连接:

Java代码  

  1. private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>() {
  2. public Connection initialValue() {
  3. return DriverManager.getConnection(DB_URL);
  4. }
  5. };
  6. public static Connection getConnection() {
  7. return connectionHolder.get();
  8. }

Session管理:

Java代码  

  1. private static final ThreadLocal threadSession = new ThreadLocal();
  2. public static Session getSession() throws InfrastructureException {
  3. Session s = (Session) threadSession.get();
  4. try {
  5. if (s == null) {
  6. s = getSessionFactory().openSession();
  7. threadSession.set(s);
  8. }
  9. } catch (HibernateException ex) {
  10. throw new InfrastructureException(ex);
  11. }
  12. return s;
  13. }

多线程:什么是ThreadLocal?应用场景?相关推荐

  1. threadlocal使用_Java多线程数据共享神器ThreadLocal

    ThreadLocal内部结构和作用 从ThreadLocal源码中可以看到其提供了3个方法,分别是get/set/remove.维护了一个ThreadLocalMap的数据结构.在多线程环境下能正确 ...

  2. spring 多线程 事务的实际应用场景

    大家好,我是烤鸭: 今天分享的是spring 多线程 事务的实际应用场景: 上一篇讲了大概的原理,主要是针对事务的开始和执行过程(数据库链接,隔离级别,threadlocal线程绑定). https: ...

  3. Java多线程中的ThreadLocal,可继承,可修改

    Java多线程中的ThreadLocal,可继承,可修改. package test;import java.util.Date;public class InheritableThreadLocal ...

  4. python多进程和多线程使用场景_Python36 多线程、多进程的使用场景

    多线程与多进程的使用场景 io 操作不占用CPU(从硬盘.从网络.从内存读数据都算io) 计算占用CPU(如1+1计算) python中的线程是假线程,不同线程之间的切换是需要耗费资源的,因为需要存储 ...

  5. 项目中Java的多线程一般用在哪些场景?

    项目中Java的多线程一般用在哪些场景? 多线程使用的主要目的在于 举个简单的例子 伪代码 多线程的常见应用场景 多线程使用的主要目的在于 1.吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做 ...

  6. 【多线程编程】--ThreadLocal、InheritableThreadLocal(ITL)、TransmittableThreadLocal(TTL)解析

    目录 一.前言 二.ThreadLocal 2.1.为什么会用到ThreadLocal(ThreadLocal应用场景) 2.2.ThreadLocal实现原理 2.3.ThreadLocalMap ...

  7. 多线程之使用:模拟一次宇宙战争来,看看多线程的其中一种使用场景。

    多线程使用:模拟一次宇宙战争来,看看多线程的其中一种使用场景. 第一步(使用Runnable) 第一步,通过Runnable构建一个军队的线程,军队发动多次进攻,线程线程执行完便是军队战争结束 把控战 ...

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

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

  9. 多线程并发神器--ThreadLocal

    什么是ThreadLocal 可以理解成线程本地变量,传统的线程对一个变量操作时操作的是同一个对象,也存在线程安全的问题. ThreadLocal是一个变量的本地副本,线程对变量的操作不会影响其他线程 ...

  10. Java多线程学习五:哪些场景需要额外注意线程安全问题及多线程也可能引起性能问题

    访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候,典型的场景有访问共享对象的属性,访问 static 静态变量,访问共享的缓存,等等.因为这些信息不仅会被一个线程访问到,还有可能被多个线程 ...

最新文章

  1. 附下载|Python带你实践机器学习圣经PRML
  2. Smiles2vec | 用于预测化学性质的深度神经网络
  3. mysql5.0入门_MySQL 5.0基础的基本内容的介绍
  4. SAP中采购订单状态与MRP的关系
  5. linux开启内部路由转发功能
  6. 浅聊一下各类以太网媒体接口MII/RMII/SMII/GMII/RGMII/SGMII
  7. 9个元素换6次达到排序序列_C语言必学的12个排序算法:希尔排序(第3篇)
  8. DedeCMS高仿老版chinaz站长网模板
  9. python 程序运行计时 动态,在python中运行计时器几分钟
  10. Linux服务器之间传输文件 scp命令
  11. 我很喜欢电影背后这个看上去很精神分裂的故事,跟影片中那个盘根错节的故事相得益彰。好的艺术作品永远都不可能被简化成纬度单一的说教。
  12. 大一期末计算机应用基础考什么,计算机应用基础期末考试试题
  13. 网络1711-12信管1711-12 图 作业评分
  14. kernel logo的制作
  15. replacestate 后退刷新_关于如何禁止浏览器后退及刷新功能
  16. 大数据营销咨询公司AIO获数百万美元天使轮融资
  17. PostGis部分点线相关函数测试
  18. 求助!win10这段时间在使用其间经常性的系统中断这个进程100%cpu的情况
  19. Socket的用法——普通Socket
  20. codeforces1428E Carrots for Rabbits

热门文章

  1. Android 源码解析之AsyncTask
  2. Swift - 17 - 数组的初始化
  3. (转)大型网站架构演化发展历程
  4. 去非数字字符串的前导零
  5. [转载] 七龙珠第一部——第070话 五人战士大突击
  6. 基于TensorFlow的2个机器学习简单应用实例
  7. 【MATLAB】绘图技巧(4)——网格线与边框线控制
  8. Blockchain区块链架构设计之四:Fabric多通道和下一代账本设计
  9. epoll使用详解(精髓)
  10. Linux下的I/O复用与epoll详解