TreadLocal
来源:互联网 发布:新浪域名国外的 编辑:程序博客网 时间:2024/05/22 16:06
ThreadLocal 实现线程范围内的共享变量,当多线程过程中,容易出现共享数据被别的线程操作,导致脏数据的发生
一:多线程导致的共享变量脏数据例子
public class ThreadLocalTest { private static int data; public static void main(String[] args){ new Thread(){ @Override public void run(){ data= new Random().nextInt(); System.out.println(Thread.currentThread().getName()+",put data:"+data); new Car().getData(); new Birck().getData(); } }.start(); new Thread(){ @Override public void run(){ data= new Random().nextInt(); System.out.println(Thread.currentThread().getName()+",put data:"+data); new Car().getData(); new Birck().getData(); } }.start(); } static class Car{ public void getData(){ System.out.println(Thread.currentThread().getName()+",A get data:"+data); } } static class Birck{ public void getData(){ System.out.println(Thread.currentThread().getName()+",B get data:"+data); } }}
返回结果
线程0存放的数据是 -1551246102, A获取的数据变成了-784747522,获取到了线程1的数据,脏数据就产生了;
二:使用ThreadLocal
public class ThreadLocalTest { private static ThreadLocal<Integer> threadLocal=new ThreadLocal<Integer>(); public static void main(String[] args) { for (int i = 0; i < 2; i++) new Thread() { @Override public void run() { int data = new Random().nextInt(); System.out.println(Thread.currentThread().getName() + ",put data:" + data); threadLocal.set(data); new Car().getData(); new Birck().getData(); } }.start(); } static class Car{ public void getData(){ System.out.println(Thread.currentThread().getName()+",A get data:"+threadLocal.get()); } } static class Birck{ public void getData(){ System.out.println(Thread.currentThread().getName()+",B get data:"+threadLocal.get()); } }}
执行结果
可以看到,每个线程都获取到了自己属于自己的数据
三:ThreadLocal在类间如何做转换
阅读全文
0 0
- TreadLocal
- TreadLocal类
- TreadLocal详解
- TreadLocal的原理及实现
- TreadLocal原理及其使用分析
- TreadLocal用法和实现原理
- java 中 TreadLocal类的使用
- Treadlocal的实现转账思想解读MVC
- 有状态bean 无状态bean 线程安全问题 spring的TreadLocal
- JAVA新手入门--对数据类型/标识符/包等概念的初步认识与了解
- 设计模式之建造者模式(Builder)
- 网址http格式的拆分
- 【图解算法】排序算法——快速排序
- 游戏网络编程(三)——WebSocket入门及实现自己的WebSocket协议
- TreadLocal
- 样式工具包
- QT之paintEvent事件
- Python3.X中的条件控制
- BZOJ 4498 魔法的碰撞
- Copy Objects to Layer
- 垃圾收集器简介
- 自适应学习率算法.基于阿米霍步长准则的线性回溯搜索算法
- ASP.NET 如何取得 Request URL 的各個部分