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

												

最新文章

  1. # git 操作拾遗
  2. Oracle行转列、列转行的Sql语句总结(转)
  3. HTML基础篇之HTML基本结构
  4. iOS9和Xcode7
  5. Lua 之数据结构
  6. PHP_解析xss攻击、sql注入
  7. [每天一道A+B]签到检测程序
  8. replace()替换文字
  9. jquery中onclick内$(this)指向
  10. POJ 2632 Crashing Robots(较为繁琐的模拟)
  11. 日期格式化{0:yyyy-MM-dd HH:mm:ss.fff}和{0:yyyy-MM-dd hh:mm:ss.fff}的区别
  12. Nginx将项目配置在子目录
  13. JDBC在javaweb中的应用之分页数据查询
  14. Result Maps collection does not contain value for com.man.impet.dao.OrderBeanMapper.map
  15. ansible-playbook相关
  16. HBase篇--HBase操作Api和Java操作Hbase相关Api
  17. Python Day 13 装饰器
  18. kalman filter卡尔曼滤波器- 数学推导和原理理解-----网上讲的比较好的kalman filter和整理、将预测值和观测值融和
  19. A - I Think I Need a Houseboat HDU - 1065(水题)
  20. 【更新】搭建 Zookeeper-3.4.11 集群

热门文章

  1. 解决jsfl 弹出警告
  2. Xcode 新建bundle id不同的且app图标也不同的新的target的步骤
  3. 如何做Go的性能优化?(转)
  4. 尚硅谷springboot学习23-SpringMVC配置
  5. 八皇后问题C语言解法
  6. Linux:简单的并发服务器实现
  7. SQL Server--存在则更新问题
  8. 用Delphi改变图片的像素,即大小
  9. Delphi 不使用自带模板创建服务
  10. hdu3189-Just Do It-(埃氏筛+唯一分解定理)