ThreadLocal的使用
来源:互联网 发布:超级基因优化液无弹窗 编辑:程序博客网 时间:2024/06/10 14:57
/**
*目的:线程封闭的方式做变量管理。
*实现:用一个map存储数据key:使用线程 value:数组 (atomicInteger+魔数) 形成hash表示数组下标
*算法:开地址算法
*替换:无状态本地方法。线程局部变量
*感想:对于线程不安全是由于共享数据导致。
*应该养成的习惯:全局变量的使用比局部变量的使用更加容易出问题。
*对于数据的get/set会触发回收机制
*/
public class MyThreadLocal {
private static ThreadLocal<Object> tl = new ThreadLocal<Object>();
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
tl.set("我是渣渣!");
System.out.println(this.hashCode()+"|"+tl.get());
try {
TimeUnit.SECONDS.sleep(3L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.hashCode()+"|"+tl.get());
Thread t3 = new Thread(new Runnable() {
public void run() {
System.out.println(this.hashCode()+"ss|ss"+tl.get());
try {
TimeUnit.SECONDS.sleep(3L);
} catch (InterruptedException e) {
}
}
});
t3.start();
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
tl.set("我是渣渣2!");
System.out.println(this.hashCode()+"|"+tl.get());
try {
TimeUnit.SECONDS.sleep(3L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.hashCode()+"|"+tl.get());
}
});
t1.start();
t2.start();
System.out.println("ssssssssssssssssssssssssssssssss");
System.out.println(t1.hashCode()+"|"+tl.get());
}
}
*目的:线程封闭的方式做变量管理。
*实现:用一个map存储数据key:使用线程 value:数组 (atomicInteger+魔数) 形成hash表示数组下标
*算法:开地址算法
*替换:无状态本地方法。线程局部变量
*感想:对于线程不安全是由于共享数据导致。
*应该养成的习惯:全局变量的使用比局部变量的使用更加容易出问题。
*对于数据的get/set会触发回收机制
*/
public class MyThreadLocal {
private static ThreadLocal<Object> tl = new ThreadLocal<Object>();
public static void main(String[] args) {
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
tl.set("我是渣渣!");
System.out.println(this.hashCode()+"|"+tl.get());
try {
TimeUnit.SECONDS.sleep(3L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.hashCode()+"|"+tl.get());
Thread t3 = new Thread(new Runnable() {
public void run() {
System.out.println(this.hashCode()+"ss|ss"+tl.get());
try {
TimeUnit.SECONDS.sleep(3L);
} catch (InterruptedException e) {
}
}
});
t3.start();
}
});
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
tl.set("我是渣渣2!");
System.out.println(this.hashCode()+"|"+tl.get());
try {
TimeUnit.SECONDS.sleep(3L);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(this.hashCode()+"|"+tl.get());
}
});
t1.start();
t2.start();
System.out.println("ssssssssssssssssssssssssssssssss");
System.out.println(t1.hashCode()+"|"+tl.get());
}
}
1 0
- ThreadLocal的使用- -
- ThreadLocal的使用
- ThreadLocal 的使用
- ThreadLocal的使用
- 关于ThreadLocal的使用
- Threadlocal类的使用
- ThreadLocal的使用
- ThreadLocal的使用
- ThreadLocal的使用
- java ThreadLocal的使用
- 关于ThreadLocal的使用
- ThreadLocal的优雅使用
- ThreadLocal的使用
- 关于ThreadLocal的使用
- ThreadLocal的使用
- ThreadLocal的使用
- ThreadLocal 的使用
- ThreadLocal的使用
- visual studio 2015 warning MSB3246
- Handler 机制
- 在opencv3中的机器学习算法
- 【CJOJ P2110】YL杯超级篮球赛
- hex文件解析
- ThreadLocal的使用
- Hadoop安装教程_单机/伪分布式配置_Hadoop2.6.0/Ubuntu14.04
- 区域链技术文章
- 一个关于数论中拉格朗日定理的证明
- CODE[VS] 3304 水果姐逛水果街I(线段树求区间最大最小值)
- TCP三次握手四次握手详解
- 增强for循环
- JAVA IO模型演进及Reactor模式
- 拷贝本地文件至HDFS异常:No FileSystem for scheme: file