ThreadLocal学习资料
下面的这一段代码运行起来,就会发生线程安全问题:
启动两个线程,同时去修改 name 属性值。
package com.liwei.thread; /**
* 下面的代码演示了线程安全发生的由来
*
* @author Administrator
*
*/
public class ThreadLocalTest implements Runnable {
private int i = 0;
private String name = null; @Override
public void run() {
for (; i < 10; i++) {
name = Thread.currentThread().getName();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + name);
}
} public static void main(String[] args) {
ThreadLocalTest tlt = new ThreadLocalTest();
Thread t1 = new Thread(tlt, "AAA");
Thread t2 = new Thread(tlt, "BBB");
t1.start();
t2.start();
}
}
为了解决这个问题,我们给代码加上同步监视器,如下:
package com.liwei.thread; /**
* 下面的代码演示了线程安全发生的由来
*
* @author Administrator
*
*/
public class ThreadLocalTest implements Runnable {
private int i = 0;
private String name = null; @Override
public void run() {
for (; i < 10000; i++) {
synchronized (this) {
name = Thread.currentThread().getName();
try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + name);
}
}
} public static void main(String[] args) {
ThreadLocalTest tlt = new ThreadLocalTest();
Thread t1 = new Thread(tlt, "AAA");
Thread t2 = new Thread(tlt, "BBB");
t1.start();
t2.start();
}
}
下面,我们的主角就要登场了,让我们来看看 ThreadLocal 的威力:
package com.liwei.thread; /**
* 下面的代码演示了线程安全发生的由来
*
* @author Administrator
*
*/
public class ThreadLocalTest2 implements Runnable { private int i = 0;
private ThreadLocal<String> threadLocal = new ThreadLocal<>(); @Override
public void run() {
for (; i < 100; i++) {
threadLocal.set(Thread.currentThread().getName()); try {
Thread.sleep(10);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(Thread.currentThread().getName() + ":" + threadLocal.get()); }
} public static void main(String[] args) {
ThreadLocalTest2 tlt = new ThreadLocalTest2();
Thread t1 = new Thread(tlt, "CCC");
Thread t2 = new Thread(tlt, "DDD");
t1.start();
t2.start();
}
}
我们通过看源码可以知道:ThreadLocalMap 以当前的 ThreadLocal 作为键。
参考资料:
ThreadLocal-分析-总结 - 洞玄 - ITeye技术网站
http://mxdba.iteye.com/blog/777716
深入浅出ThreadLocal - Java综合 - Java - ITeye论坛
http://www.iteye.com/topic/757478
ThreadLocal学习资料的更多相关文章
- webapi的学习资料
猿教程_-webapi教程-WebAPI教程 猿教程_-webapi教程-Web API概述 猿教程_-webapi教程-新建Web Api项目 猿教程_-webapi教程-测试Web API 猿教程 ...
- netty学习资料
netty学习资料推荐官方文档和<netty权威指南>和<netty in action>这两本书.下面收集下网上分享的资料 netty官方参考文档 Netty 4.x Use ...
- iOS 开发学习资料整理(持续更新)
“如果说我看得比别人远些,那是因为我站在巨人们的肩膀上.” ---牛顿 iOS及Mac开源项目和学习资料[超级全面] http://www.kancloud.cn/digest/ios-mac ...
- 最新JavaScript、Ajax典藏级学习资料下载分类汇总 (2011年12月21日更新)
其他网站开发相关资料 超强HTML和xhtml,CSS精品学习资料下载汇总 最新htm ...
- VC++/MFC(VC6)开发技术精品学习资料下载汇总
工欲善其事,必先利其器,VC开发MFC Windows程序,Visual C++或Visual Studio是必须的,恩,这里都给你总结好了,拿去吧:VC/MFC开发必备Visual C++.Visu ...
- C/C++编程语言学习资料尽收眼底 电子书+视频教程
Visual C++(VC/MFC)学习电子书及开发工具下载请看这里 史无前例的网络最全最强C/C++资料索引: C/C++编程语言学习资料尽收眼底 电子书+视频教程 VC++/MFC(VC6)开发技 ...
- yaf学习资料
yaf学习资料 文档 鸟哥的官方文档 Yaf框架结合PHPUnit的集成测试 php yaf框架扩展实践六--单元测试.计划任务.第三方库等 php yaf框架扩展实践一--配置篇 yaf实战例子 y ...
- [整理]FPGA学习资料汇总
01.特权同学倾情奉献海量FPGA学习资料 http://pan.baidu.com/s/1pJIb32F
- Python学习资料下载地址(转)
[转]Python学习资料和教程pdf 开发工具: Python语言集成开发环境 Wingware WingIDE Professional v3.2.12 Python语言集成开发环境 Wingwa ...
随机推荐
- Jmeter学习前的基本了解
参考:九州八神的软件测试视频资料---来自于网络 jmeter基于java,跨平台的. 下载:官网http://jmeter.apache.org/ 最好下载最新版,有一些新的功能.注 ...
- 应用安全 - 代码审计 - Python
flask客户端session导致敏感信息泄露 flask验证码绕过漏洞 CodeIgniter 2.1.4 session伪造及对象注入漏洞 沙箱逃逸
- 工具 - MSF
#ms17- use auxiliary/scanner/smb/smb_ms17_010 - exploit use exploit/windows/smb/ms17_010_eternalblue ...
- 如何给vue 日期控件赋值
项目中需要用到日期时间插件,尝试用bootstrap.element的时间插件都各有各的报错,对于一个菜鸟来说真的是很痛苦啊.终于,最后用了layDate实现了需要的功能 最终效果: 使用步骤: 1. ...
- js 获取屏幕宽高
网页可见区域宽: document.body.clientWidth 网页可见区域高: document.body.clientHeight 网页可见区域宽: document.body.offset ...
- 东软、天健、金仕达、杭创、中联、NECHIS、军字一号 HIS产品的比较
HIS主流厂商产品介绍1.沈阳东软医疗系统有限公司创立于1998年公司是中国目前最大的软件集团——东软集团为技术和资源依托,以研制生产大型医疗设备为主,同时为医院数字化提供全面解决方案.但是,公司改制 ...
- CentOS7 redhat7 linux系统1分钟安装Zabbix web 监控 服务器
一.准备工作OS:centos7.4Zabbix version:3.4.6(2018/1/15日上线的新版本)Database:MariaDB关闭防火墙:systemctl stop firewal ...
- P2835 刻录光盘 (tarjan缩点)
[题目描述] 现在假设总共有N个营员(2<=N<=200),每个营员的编号为1~N.LHC给每个人发了一张调查表,让每个营员填上自己愿意让哪些人到他那儿拷贝资料.当然,如果A愿意把资料拷贝 ...
- 回溯---N皇后
N 皇后 51. N-Queens (Hard) 题目描述: 在n*n的矩阵中摆放n个皇后,并且每个皇后不能在同一列,同一个对角线上,求所有的n皇后解. 思路分析: 一行一行地摆放,在确定一行 ...
- mybatis resultMap之collection聚集两种实现方式
最近做得项目用到了MyBatis处理一对多的映射关系,下面的两个方法中用到了集合的嵌套查询方法,下面仔细学习一下这两种方式 聚集元素用来处理"一对多"的关系.需要指定映射的Java ...