ThreadLocal的几种误区 | 天狼星技术博客

最近由于需要用到ThreadLocal,在网上搜索了一些相关资料,发现对ThreadLocal经常会有下面几种误解

一、ThreadLocal是java线程的一个实现
ThreadLocal的确是和java线程有关,不过它并不是java线程的一个实现,它只是用来维护本地变量。针对每个线程,提供自己的变量版本,主要是为了避免线程冲突,每个线程维护自己的版本。彼此独立,修改不会影响到对方。

二、ThreadLocal是相对于每个session的

ThreadLocal顾名思义,是针对线程。在java web编程上,每个用户从开始到会话结束,都有自己的一个session标识。但是ThreadLocal并不是在会话层上。其实,Threadlocal是独立于用户session的。它是一种服务器端行为,当服务器每生成一个新的线程时,就会维护自己的ThreadLocal。对于这个误解,个人认为应该是开发人员在本地基于一些应用服务器测试的结果。众所周知,一般的应用服务器都会维护一套线程池,也就是说,对于每次访问,并不一定就新生成一个线程。而是自己有一个线程缓存池。对于访问,先从缓存池里面找到已有的线程,如果已经用光,才去新生成新的线程。所以,由于开发人员自己在测试时,一般只有他自己在测,这样服务器的负担很小,这样导致每次访问可能是共用同样一个线程,导致会有这样的误解:每个session有一个ThreadLocal

三、ThreadLocal是相对于每个线程的,用户每次访问会有新的ThreadLocal

理论上来说,ThreadLocal是的确是相对于每个线程,每个线程会有自己的ThreadLocal。但是上面已经讲到,一般的应用服务器都会维护一套线程池。因此,不同用户访问,可能会接受到同样的线程。因此,在做基于TheadLocal时,需要谨慎,避免出现ThreadLocal变量的缓存,导致其他线程访问到本线程变量

四、对每个用户访问,ThreadLocal可以多用
可以说,ThreadLocal是一把双刃剑,用得来的话可以起到非常好的效果。但是,ThreadLocal如果用得不好,就会跟全局变量一样。代码不能重用,不能独立测试。因为,一些本来可以重用的类,现在依赖于ThreadLocal变量。如果在其他没有ThreadLocal场合,这些类就变得不可用了。

ThreadLocal的几种误区 | 天狼星技术博客相关推荐

  1. Netflix 官方技术博客:个性化分发与推荐,走在前列的 Netflix 是怎么做的?

    来源:36氪 概要:对于个性化分发与推荐,Netflix都是一个走在前面的公司.其首页的个性化推荐策略不断被后来者所模仿. 对于个性化分发与推荐,Netflix都是一个走在前面的公司.其首页的个性化推 ...

  2. 编写字符串反转函数 - 小小外星人的技术博客 - 博客频道 - CSDN.NET

    编写字符串反转函数 - 小小外星人的技术博客 - 博客频道 - CSDN.NET 编写字符串反转函数 分类: 笔试面试题 2010-11-07 20:47 863人阅读 评论(0) 收藏 举报 首先用 ...

  3. (2006, 'MySQL server has gone away') 错误解决 - dba007的空间 - 51CTO技术博客

    (2006, 'MySQL server has gone away') 错误解决 - dba007的空间 - 51CTO技术博客 (2006, 'MySQL server has gone away ...

  4. 用lambda对std::list排序 - 力为的技术博客 - C++博客

    用lambda对std::list排序 - 力为的技术博客 - C++博客 用lambda对std::list排序 std::list提供了两个排序方法:std::list::sort() 和std: ...

  5. 【编程之外】为什么我们要写技术博客?

    博客,其实更多是写给自己看的 这是一个你第一眼看去绝不大可能同意的观点,"what? 博客的主要作用难道不是给他人分享自己学来的知识吗?",你可能会抱有这样的疑问.对此,且听我细细 ...

  6. 手把手教你写高质量Android技术博客,画图工具,录像工具,Markdown写法

    前言 作为程序员,写博客是一件很有意义的事情,可以加深自己对技术的理解,可以结交更多的朋友,记录自己的技术轨迹,而且分享可以让更多的人从中受益,独乐乐不如众乐乐嘛. 但是要写好博客也不是件容易的事,一 ...

  7. 计算机技术博客博客知乎,我的技术博客的选择:CSDN、博客园、简书、知乎专栏仍是Github Page?...

    有不少技术人员在学习到必定程度后发现了写博客的重要性,一方面帮助本身记忆,一方面也能帮助他人解决问题,因而会选择本身开始写博客,以后又发现平台太多不知从何下手,在这里我根据本身写博客的经验比较一下各个 ...

  8. 从 0 开始搭建一个技术博客,私藏干货~

    2019独角兽企业重金招聘Python工程师标准>>> 技术博客的选型有很多种,如:博客园.CSDN.开源中国.简书.知乎等--都可以用来写文章,形成自己的技术博客. 上面的博客都是 ...

  9. “我有必要写技术博客吗?” 写技术博客一年,谈谈其得失优劣

    本文全文不含任何推广,所提到的博主.公众号皆为笔者真真切切接触.学习过的. 大三上学期读了许多"程序员"的公众号,当时计算机基础知识并不好,很多文章读的一知半解.只记得关注了几个很 ...

最新文章

  1. win10系统的qq无网络连接网络连接到服务器,Win10系统下误报无法连接internet该怎么办?新手速看...
  2. 北信源携手天津麒麟共建国产信息安全
  3. 域名解析 A记录 MX记录 CNAME记录 TTL
  4. 7.11 其他面向对象设计原则2:能用组合的地方,不要用继承
  5. Hbase 深度使用分析
  6. 第四讲 身份认证技术
  7. Python使用scipy简单求解线性规划问题
  8. CSP-J 2021 小熊的果篮
  9. 正点原子的串口助手XCOM V2.0编码问题
  10. PHP 互亿无线语音通知
  11. 悉尼mit it硕士选课 INFO5990
  12. 算法分享: 动态规划之拱桥回文算法
  13. VMware Tools 安装成功无法从主机拖动文件到虚拟机
  14. 与爱同行,育润走进贫困家庭,助推公益事业
  15. excel文件被写保护怎么解除_excel撤销写保护的教程
  16. [收藏] Javascript Keycode表
  17. 学专业计算机可以当游戏主播吗,一个专业的游戏主播需要什么配置的电脑
  18. 浙江美格机械股份有限公司董事长——刘国方
  19. ECharts API文档
  20. sql分组查询的使用

热门文章

  1. Swift-析构过程
  2. javaapi接口开发
  3. oracle查看expdp进度,备份之监控数据备份恢复完成进度(EXPDP/IMPDP/RMAN)
  4. 谈谈Android热修复
  5. 重写了mysql5dialect_自定义一个方言类——Hibernate Dialect
  6. 百度地图开发者平台普通IP定位功能详解
  7. algorithm库函数集合
  8. 车载充电机完整方案, 资料包含 LLC源码,PFC源码,原理图,PCB,变压器设计等
  9. 富文本编辑器CKeditor的基本使用
  10. 《幸福就在你身边》第五课、幸福就在当下【哈佛大学幸福课精华】