多线程:什么是ThreadLocal?应用场景?
ThreadLocal(避免线程不安全问题)
什么是ThreadLocal?
线程本地变量,也有些地方叫做线程本地存储,他代表一个线程局部变量。
为什么要ThreadLocal?
如果一段代码中所需要的数据必须与其他代码共享,那就看看这些共享数据的代码能否保证在同一个线程中执行?如果能够保证,我们就可以把共享数据的可见范围限定在同一个线程之内,这样无需同步,也能够保证线程之间不出现数据的争用问题了。
面向的问题是从根本上避免多个线程对共享资源的竞争,是为了隔离多个线程的数据共享,也就不需要对多个线程进行同步了。
通过把数据放在ThreadLocal中就可以让每个线程创建一个该变量的副本。从而避免了并发访问时线程安全的问题了。
private ThreadLocal<String> name = new ThreadLocal<>();
ThreadLocal的应用场景
最常见的ThreadLocal使用场景为 用来解决数据库连接、Session管理等。如:
数据库连接:
Java代码
- private static ThreadLocal<Connection> connectionHolder = new ThreadLocal<Connection>() {
- public Connection initialValue() {
- return DriverManager.getConnection(DB_URL);
- }
- };
- public static Connection getConnection() {
- return connectionHolder.get();
- }
Session管理:
Java代码
- private static final ThreadLocal threadSession = new ThreadLocal();
- public static Session getSession() throws InfrastructureException {
- Session s = (Session) threadSession.get();
- try {
- if (s == null) {
- s = getSessionFactory().openSession();
- threadSession.set(s);
- }
- } catch (HibernateException ex) {
- throw new InfrastructureException(ex);
- }
- return s;
- }
多线程:什么是ThreadLocal?应用场景?相关推荐
- threadlocal使用_Java多线程数据共享神器ThreadLocal
ThreadLocal内部结构和作用 从ThreadLocal源码中可以看到其提供了3个方法,分别是get/set/remove.维护了一个ThreadLocalMap的数据结构.在多线程环境下能正确 ...
- spring 多线程 事务的实际应用场景
大家好,我是烤鸭: 今天分享的是spring 多线程 事务的实际应用场景: 上一篇讲了大概的原理,主要是针对事务的开始和执行过程(数据库链接,隔离级别,threadlocal线程绑定). https: ...
- Java多线程中的ThreadLocal,可继承,可修改
Java多线程中的ThreadLocal,可继承,可修改. package test;import java.util.Date;public class InheritableThreadLocal ...
- python多进程和多线程使用场景_Python36 多线程、多进程的使用场景
多线程与多进程的使用场景 io 操作不占用CPU(从硬盘.从网络.从内存读数据都算io) 计算占用CPU(如1+1计算) python中的线程是假线程,不同线程之间的切换是需要耗费资源的,因为需要存储 ...
- 项目中Java的多线程一般用在哪些场景?
项目中Java的多线程一般用在哪些场景? 多线程使用的主要目的在于 举个简单的例子 伪代码 多线程的常见应用场景 多线程使用的主要目的在于 1.吞吐量:你做WEB,容器帮你做了多线程,但是他只能帮你做 ...
- 【多线程编程】--ThreadLocal、InheritableThreadLocal(ITL)、TransmittableThreadLocal(TTL)解析
目录 一.前言 二.ThreadLocal 2.1.为什么会用到ThreadLocal(ThreadLocal应用场景) 2.2.ThreadLocal实现原理 2.3.ThreadLocalMap ...
- 多线程之使用:模拟一次宇宙战争来,看看多线程的其中一种使用场景。
多线程使用:模拟一次宇宙战争来,看看多线程的其中一种使用场景. 第一步(使用Runnable) 第一步,通过Runnable构建一个军队的线程,军队发动多次进攻,线程线程执行完便是军队战争结束 把控战 ...
- threadlocal使用场景_深入剖析ThreadLocal
点击上方 IT牧场 ,选择 置顶或者星标 技术干货每日送达 朋友们在遇到线程安全问题的时候,大多数情况下可能会使用synchronized关键字,每次只允许一个线程进入锁定的方法或代码块,这样就可以保 ...
- 多线程并发神器--ThreadLocal
什么是ThreadLocal 可以理解成线程本地变量,传统的线程对一个变量操作时操作的是同一个对象,也存在线程安全的问题. ThreadLocal是一个变量的本地副本,线程对变量的操作不会影响其他线程 ...
- Java多线程学习五:哪些场景需要额外注意线程安全问题及多线程也可能引起性能问题
访问共享变量或资源 第一种场景是访问共享变量或共享资源的时候,典型的场景有访问共享对象的属性,访问 static 静态变量,访问共享的缓存,等等.因为这些信息不仅会被一个线程访问到,还有可能被多个线程 ...
最新文章
- 附下载|Python带你实践机器学习圣经PRML
- Smiles2vec | 用于预测化学性质的深度神经网络
- mysql5.0入门_MySQL 5.0基础的基本内容的介绍
- SAP中采购订单状态与MRP的关系
- linux开启内部路由转发功能
- 浅聊一下各类以太网媒体接口MII/RMII/SMII/GMII/RGMII/SGMII
- 9个元素换6次达到排序序列_C语言必学的12个排序算法:希尔排序(第3篇)
- DedeCMS高仿老版chinaz站长网模板
- python 程序运行计时 动态,在python中运行计时器几分钟
- Linux服务器之间传输文件 scp命令
- 我很喜欢电影背后这个看上去很精神分裂的故事,跟影片中那个盘根错节的故事相得益彰。好的艺术作品永远都不可能被简化成纬度单一的说教。
- 大一期末计算机应用基础考什么,计算机应用基础期末考试试题
- 网络1711-12信管1711-12 图 作业评分
- kernel logo的制作
- replacestate 后退刷新_关于如何禁止浏览器后退及刷新功能
- 大数据营销咨询公司AIO获数百万美元天使轮融资
- PostGis部分点线相关函数测试
- 求助!win10这段时间在使用其间经常性的系统中断这个进程100%cpu的情况
- Socket的用法——普通Socket
- codeforces1428E Carrots for Rabbits