2019独角兽企业重金招聘Python工程师标准>>>

很多文章都拿它跟同步机制作比较,我觉得这个思路对于理解这个东西完全没有作用。

ThreadLocal跟synchronize这类东西作比较,是很多文章的套路,我感觉这么比较,就跟比较重载跟重写的区别,final跟finally的区别一样,越比较越混乱。两者关注的方向压根都不同。

ThreadLocal的应用场合,我觉得最适合的是按线程多实例(每个线程对应一个实例)的对象的访问,并且这个对象很多地方都要用到

这个是我觉得解释ThreadLocal最好的总结,

session的例子特别可以说明问题,一个线程对应一个session,在执行的过程当中可能很多地方都要获取session中的值,如果在编写代码的过程当中,一直把session当做一个传参数,在方法中或者对象间各种传递,也不是不可以,但是这代码得是有多难看。但是使用TreadLocal的话,代码就简便了很多。而且还有很好的隔离性。所以ThreadLocal是一种编写代码的思路,但是并不是只能采用这种方式才行。最后抄个例子,简单的说明下这个东东怎么用。

package test;  import java.util.Random;  class Student {  private int age;  public int getAge() {  return age;  }  public void setAge(int age) {  this.age = age;  }
}  public class TestThreadLocal implements Runnable {  ThreadLocal studentLocal = new ThreadLocal();  public static void main(String[] args) {  TestThreadLocal t = new TestThreadLocal();  new Thread(t, "t1").start();  new Thread(t, "t2").start();  }  @Override  public void run() {  accessStudent();  }  private void accessStudent() {  Student s = this.getStudent();  Random random = new Random();  int age = random.nextInt(100);  System.out.println("current thread set age " + Thread.currentThread()  + ":" + age);  s.setAge(age);  System.out.println("current thread first get age "  + Thread.currentThread() + ":" + s.getAge());  try {  Thread.sleep(500);  } catch (InterruptedException e) {  // TODO Auto-generated catch block  e.printStackTrace();  }  System.out.println("current thread second get age "  + Thread.currentThread() + ":" + s.getAge());  }  public Student getStudent() {  Student s = (Student) studentLocal.get();  if (s == null) {  s = new Student();  studentLocal.set(s);  }  return s;  }
} 

转载于:https://my.oschina.net/u/1246109/blog/834342

ThreadLocal 你到底是个什么鬼相关推荐

  1. 章磊回答: 姚期智提出的百万富翁难题被破解? 多方安全计算MPC到底是个什么鬼?

    姚期智提出的"百万富翁"难题被破解? 多方安全计算MPC到底是个什么鬼? 作者 | 章磊 责编 | Aholiab 出品 | CSDN.ARPA 在越来越多对数据隐私的担忧声中,政 ...

  2. 【干货】CRM大牛告诉你,Salesforce到底是个什么鬼?

    本期主题 | Salesforce到底是个什么鬼 分享嘉宾 | 裘思博 Celnet雨花石创始人&合伙人 文字整理 | 莜筱 入群请联系管理员 37℃ 微信号:erhuoyimei 裘思博 本 ...

  3. python logger handler_Python中的logger和handler到底是个什么鬼

    最近的任务经常涉及到日志的记录,特意去又学了一遍logging的记录方法.跟java一样,python的日志记录也是比较繁琐的一件事,在写一条记录之前,要写好多东西.典型的日志记录的步骤是这样的: 创 ...

  4. 广义线性模型到底是个什么鬼?

    以下文章内容摘自网络:说人话的统计学 原标题:广义线性模型到底是个什么鬼? ❉说人话的统计学❉ 从逻辑回归模型开始,我们连续讲了好多集有些相似又特点各异的几种统计模型.它们有个统一的旗号,叫做「广义线 ...

  5. 区块链到底是个什么鬼,一幅漫画让你秒懂

    区块链到底是个什么鬼,一幅漫画让你秒懂 字体:  小  中  大  | 打印发布: 2018-1-12 10:58    作者: n    来源: 21世纪经济报道    查看: 930 次 区块链技 ...

  6. 计算机硬件的漏洞,震惊了硬件圈子的CPU漏洞,到底是个什么鬼?

    原标题:震惊了硬件圈子的CPU漏洞,到底是个什么鬼? 这两天如果你关注一点硬件圈的话,可能会注意到这两天CPU爆出了两个重要漏洞(一开始大家以为只有一个).关于这俩漏洞,身边也有人问过橙子君这究竟是个 ...

  7. Vuex白话教程第一讲:Vuex到底是个什么鬼?

    Vuex白话教程第一讲:Vuex到底是个什么鬼? Vuex白话教程第二讲:Vuex旗下的State和Getter Vuex白话教程第三讲:Vuex旗下的Mutation Vuex白话教程第四讲:Vue ...

  8. 枚举到底是个什么鬼类型?

    前言 枚举是很多面向对象语言都会有的一种类型,它可以将表达同一类型的变量组合成一个集合,组成一个常量集 在Java中也有枚举类型,是用enum关键字来表示的 枚举常用来表示一个常量集,用来限定变量的取 ...

  9. 敏捷到底是个什么鬼?

    " 如何用一两句话说清楚敏捷的本质是什么呢?" 温馨提示,如果眼睛太累或者在忙其他事,按照这个攻略可以听本文: 看文章很累,不如听吧!手把手教你如何听公众号文章 大家都知道,敏捷虽 ...

最新文章

  1. 29岁,从不学无术到技术Leader:这几个学习资源,决定你5年后的技术提升!
  2. SQL Server 2005 镜像构建说明(转载)
  3. Windows基本路由配置(cmd/route)
  4. Angular:where does watchers in scope come from
  5. 30分钟快速搭建移动应用直传OSS服务
  6. simple php手册,PHP中SimpleXML函数简介
  7. 金山词霸发音功能需要Flash player
  8. 毕向东java ppt下载_毕向东Java基础ppt课件
  9. 【量化实战】跟随龙虎榜个股交易能获利吗?
  10. 【C语言】输出“*”菱形图案
  11. 多目标优化 MOP (二):遗传算法 SPEA2 2001
  12. 你所不知的米聊和微信的前身——酷啦啦
  13. js获取最近12个月
  14. Vue中图片加载问题总结
  15. 什么是抽象工厂模式?
  16. set transaction
  17. JDBC(Java Data Base Connectivity)基本用法
  18. 【刷题汇总】 CSP/NOIP真题分析 基础OJ刷题包
  19. 「JSOI2019」节日庆典 (Z-Algorithm)
  20. 教妹学Java:JDK 与 JRE 之间的区别是什么?

热门文章

  1. java 负载均衡_java负载均衡 - 岁月静好I的个人空间 - OSCHINA - 中文开源技术交流社区...
  2. 的使用_面部精华使用方法和使用步骤;
  3. 安卓手机突然很卡_你的安卓手机越来越卡?教你4招轻松解决问题!
  4. 【1】C++面试题函数引用重载宏命名空间
  5. Linux进程间通信:共享内存与管道
  6. 【操作系统】进程调度(4):I/O、不可预测的运行时间
  7. 通过syslog接收远程日志
  8. UNIX网络编程笔记(1):TCP简介
  9. 入职阿里啦!docker-e命令参数
  10. Java面试题及答案2020,java数组循环赋值