多线程并发神器--ThreadLocal

转载自 多线程并发神器--ThreadLocal


什么是ThreadLocal


可以理解成线程本地变量,传统的线程对一个变量操作时操作的是同一个对象,也存在线程安全的问题。


ThreadLocal是一个变量的本地副本,线程对变量的操作不会影响其他线程。


首先看看ThreadLocal的类结构



其中可重写的方法有以下几个




initialValue():ThreadLocal初始化的值,新建ThreadLocal的一般要重写给个初始的值。


get():获取当前线程变量的副本值。


set(T value):设置、更新当前线程上的变量副本值。


remove():移除当前线程上的变量副本。


ThreadLocal使用


新建ThreadLocal,类型为User,并初始化为tom,12岁,启动3个线程,每个线程循环3次,休眠1少,主线程再输出。



输出结果如下



从结果可见每个线程使用的是各自线程的变量副本,并没有影响其他线程和主线程,实现了线程隔离的效果。


使用场景


一般用来解决数据库连接、用户session管理等。


内存泄露问题


如果线程的执行周期过长可能导致内存泄露的风险,虽然线程执行完后会ThreadLocal也会随着销毁,但最好使用完后加上remove这样会加快内存的释放,一般来说线程周期不长是不太会引起内存泄露的。还有如果定义了ThreadLocal又不用也有问题,因为每次ThreadLocal的get/set/remove操作都会清理无效的key加快内存释放。ThreadLocal应用比较广泛,如果不是滥用,利是大于憋的。



本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/330545.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

如何获取复选框的值

开发工具与关键技术:Visual Studio、MVC 作者:幻奏 撰写时间:2019.6.7我们在很多地方都用到了复选框,数据表格里也有复选框,新增数据时也可能要复选框,修改时也要回填复选框,所以我们用到的地方…

使用log4j2打印mybatis的sql执行日志

【1】maven配置jar包依赖&#xff0c; 如下&#xff1a; <!-- 日志jar --><!-- https://mvnrepository.com/artifact/org.apache.logging.log4j/log4j-api --><dependency><groupId>org.apache.logging.log4j</groupId><artifactId>log4j-…

Java多线程神器:join使用及原理

转载自 Java多线程神器&#xff1a;join使用及原理 join() join()是线程类 Thread的方法&#xff0c;官方的说明是&#xff1a; Waits for this thread to die. 等待这个线程结束&#xff0c;也就是说当前线程等待这个线程结束后再继续执行&#xff0c;下面来看这个示例就明白…

页面残留数据该如何处理

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.6.13关于页面数据残留的问题&#xff0c;我前几天就遇到了&#xff0c;刚开始的时候我写完那个页面是不知道它有毛病的&#xff0c;后来我才发现了它居然有一个小问题。 先来…

基于maven的SpringMVC+Spring+MyBatis+Log4j2的pom配置

【0】README&#xff1a;本文旨在给出可以正常跑 测试用例的项目依赖配置&#xff0c; 同时还会给出 maven 编译项目时的坑儿&#xff1b; 【1】 pom配置&#xff1a; <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/20…

一张图弄懂java线程的状态和生命周期

转载自 一张图弄懂java线程的状态和生命周期 上图是一个线程的生命周期状态流转图&#xff0c;很清楚的描绘了一个线程从创建到终止的过程。 这些状态的枚举值都定义在java.lang.Thread.State下 NEW&#xff1a;毫无疑问表示的是刚创建的线程&#xff0c;还没有开始启动。 RUNN…

如何添加数据到session中

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.6.17我们都知道session相当于服务器的一次对话&#xff0c;服务器会为每个新的用户创建一个新的 Session&#xff0c;并在 session 到期时撤销掉这个 Session 对象。所以sess…

MySQL8.0: Serialized Dictionary Information(SDI) 浅析

转自&#xff1a; https://yq.aliyun.com/articles/600183 SDI是Serialized Dictionary Information的缩写&#xff0c;是MySQL8.0重新设计数据词典后引入的新产物。我们知道MySQL8.0开始已经统一使用InnoDB存储引擎来存储表的元数据信息&#xff0c;但对于非InnoDB引擎&#…

非常有用的并发控制-倒计时器CountDownLatc

转载自 非常有用的并发控制&#xff0d;倒计时器CountDownLatch CountDownLatch见名思义&#xff0c;即倒计时器&#xff0c;是多线程并发控制中非常有用的工具类&#xff0c;它可以控制线程等待&#xff0c;直到倒计时器归0再继续执行。 给你出个题&#xff0c;控制5个线程执…

移除指定的session

在上次我写的文章中&#xff0c;我描述了如何把数据添加到session里面&#xff0c;再让临时表格读取session的数据显示到页面。 我们都知道&#xff0c;有添加就有移除对吧&#xff0c;哪么我们又该如何把临时表格里面的数据移除呢&#xff1f;嘿嘿&#xff0c;这个其实也挺简…

javap命令参数

C:\Users\pacoson>javap -help 用法: javap <options> <classes> 其中, 可能的选项包括:-help --help -? 输出此用法消息-version 版本信息-v -verbose 输出附加信息-l 输出行号和本地变量表-pub…

非常有用的并发控制-循环栅栏CyclicBarrier

转载自 非常有用的并发控制&#xff0d;循环栅栏CyclicBarrier昨天我讲了倒计时器CountDownLatch的应用&#xff0c;它是阻塞线程直到计时器归0的一种等待方式。今天讲的这个循环栅栏CyclicBarrier与倒计时器非常类似&#xff0c;但它比倒时器更加强大且稍微复杂&#xff0c;它…

一个会定时执行的方法

开发工具与关键技术&#xff1a;Visual Studio、MVC作者&#xff1a;幻奏撰写时间&#xff1a;2019.6.27我们在做项目的时候不是有一些要我们定时完成的任务吗&#xff1f;很多人应该都会用定时器来完成这个任务。我今天要讲的就是如何使用定时器的插件来完成我们今天的任务。 …

VC6.0下载及安装

转自&#xff1a; https://blog.csdn.net/weixin_37536336/article/details/81187963 希望对下载&#xff0c;并学习C语言的朋友&#xff0c;有帮助。 1.绿色版&#xff1a; 网址&#xff1a;https://pan.baidu.com/s/1jN70y8x6-_1XGJHESlMspA 密码&#xff1a;sla5 2.企业…

如何实现下拉框的绑定

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.7.5下拉框你们都见过吧&#xff0c;下拉框的作用是方便用户更快的输入&#xff0c;同时也限制了用户&#xff0c;再也不怕用户乱写啦。 下拉框我们该如何绑定呢&#xff0c;这…

volatile关键字解析~高级java必问

转载自 volatile关键字解析~高级java必问昨天我介绍了原子性、可见性、有序性的概念&#xff0c;那么今天就来见识下这些概念的主角-volatile关键字。volatile基本介绍volatile可以看成是synchronized的一种轻量级的实现&#xff0c;但volatile并不能完全代替synchronized&…

B树、B+树、B*树谈到R 树

转自&#xff1a; https://blog.csdn.net/v_JULY_v/article/details/6530142 从B 树、B 树、B* 树谈到R 树 作者&#xff1a;July、weedge、Frankie。编程艺术室出品。 说明&#xff1a;本文从B树开始谈起&#xff0c;然后论述B树、B*树&#xff0c;最后谈到R 树。其中B树、B树…

一个会定时完成的任务(二)

开发工具与关键技术&#xff1a;Visual Studio、MVC 作者&#xff1a;幻奏 撰写时间&#xff1a;2019.7.5上次我大概说了一下定时任务是如何实现的&#xff0c;由于我只是大概的说了那个插件是如何使用的&#xff0c;它的其他方法我还没和你们细说&#xff0c;所以&#xff0c;…

String.format()方法的使用

转载自 java字符串格式化&#xff1a;String.format()方法的使用常规类型的格式化 String类的format()方法用于创建格式化的字符串以及连接多个字符串对象。熟悉C语言的读者应该记得C语言的sprintf()方法&#xff0c;两者有类似之处。format()方法有两种重载形式。 l form…

转-《高性能mysql》并不是一本好书——SQL笔记

转自&#xff1a; https://book.douban.com/review/8122660/ 版权归作者所有&#xff0c;任何形式转载请联系作者。 作者&#xff1a;姚泽源&#xff08;来自豆瓣&#xff09; 来源&#xff1a;https://book.douban.com/review/8122660/ 在知乎上发过一次&#xff0c;这里也发一…