ThreaLocal
2024-10-12 23:28:01
ThreadLocal概念:线程局部变量,是一种多线程间并发访问变量的解决方案。与其synchronized等加锁的方式不同,ThreadLocal完全不提供锁,而使用以空间换时间的手段,为每个线程提供变量的独立副本,以保障线程安全。
从性能上说,ThreadLocal不具有绝对的优势,在并发不是很高的时候,加锁的性能会更好,但作为一套与锁完全五官的线程安全解决方案,在高并发量或者竞争激烈的场景,使用ThreadLocal可以在一定程度上减少锁的竞争。
同样,看一段小demo:
public class ConnThreadLocal {
public static ThreadLocal<String> th = new ThreadLocal<String>(); public void setTh(String value) {
th.set(value);
} public void getTh() {
System.out.println(Thread.currentThread().getName() + ":" + this.th.get());
} public static void main(String[] args) {
final ConnThreadLocal ct = new ConnThreadLocal();
Thread t1 = new Thread(new Runnable() {
@Override
public void run() {
ct.setTh("张三");
ct.getTh();
}
}, "t1");
Thread t2 = new Thread(new Runnable() {
@Override
public void run() {
try {
Thread.sleep(1000);
ct.getTh();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}, "t2");
t1.start();
t2.start();
}
} 这段代码的运行结果是:
也就是说,每一个线程里面,都单独使用了ThreaLocal
最新文章
- # git 操作拾遗
- Oracle行转列、列转行的Sql语句总结(转)
- HTML基础篇之HTML基本结构
- iOS9和Xcode7
- Lua 之数据结构
- PHP_解析xss攻击、sql注入
- [每天一道A+B]签到检测程序
- replace()替换文字
- jquery中onclick内$(this)指向
- POJ 2632 Crashing Robots(较为繁琐的模拟)
- 日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别
- Nginx将项目配置在子目录
- JDBC在javaweb中的应用之分页数据查询
- Result Maps collection does not contain value for com.man.impet.dao.OrderBeanMapper.map
- ansible-playbook相关
- HBase篇--HBase操作Api和Java操作Hbase相关Api
- Python Day 13 装饰器
- kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和
- A - I Think I Need a Houseboat HDU - 1065(水题)
- 【更新】搭建 Zookeeper-3.4.11 集群