ThreadLocal的几种误区

原创 2007年10月08日 10:17:00
最近由于需要用到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、存放当前session用户:quake want的jert

  2、存放一些context变量,比如webwork的ActionContext

  3、存放session,比如Spring hibernate orm的session 

几个常见思维误区

有很多人大学毕业后,还是保持学习,这其实挺好的。但进入社会开始工作后,现在的学习跟大学时候的学习肯定是有区别的。最大的区别是,这个时候你所学的要用起来创造价值。 思维方式出问题 考场逻辑:我没有准...
  • luopeng123456789
  • luopeng123456789
  • 2015年10月14日 15:58
  • 504

ThreadLocal的几种误区

一、ThreadLocal是java线程的一个实现       ThreadLocal的确是和java线程有关,不过它并不是java线程的一个实现,它只是用来维护本地变量。针对每个线程,提供自己的变...
  • lzm1340458776
  • lzm1340458776
  • 2014年05月31日 14:10
  • 521

ThreadLocal用途

ThreadLocal是什么 早在JDK 1.2的版本中就提供java.lang.ThreadLocal,ThreadLocal为解决多线程程序的并发问题提供了一种新的思路。使用这个工具类可以很...
  • lang_man_xing
  • lang_man_xing
  • 2012年07月08日 19:25
  • 3204

Java并发 : ThreadLocal的几种误区

http://www.blogjava.net/jspark/archive/2006/08/01/61165.html ThreadLocal的几种误区  最近由于需要用到ThreadLocal...
  • javaACMer
  • javaACMer
  • 2013年06月05日 23:54
  • 1190

ThreadLocal应用的几种误区(4)

最近由于需要用到ThreadLocal,在网上搜索了一些相关资料,发现对ThreadLocal经常会有下面几种误解  一、ThreadLocal是java线程的一个实现       Threa...
  • liuzx32
  • liuzx32
  • 2012年07月25日 22:43
  • 619

ThreadLocal误区

对于ThreadLocal的详细解析可以看看下面这篇文章: 线程知识-ThreadLocal使用详解这里就不重复拷贝了,OK,来记录一下使用ThreadLocal碰到的一点误解。以SimpleDat...
  • kingoneyun
  • kingoneyun
  • 2017年05月03日 11:52
  • 141

ThreadLocal了解和几种常见误区

深入研究java.lang.ThreadLocal类     一、概述   ThreadLocal是什么呢?其实ThreadLocal并非是一个线程的本地实现版本,它并不是一个Thread,...
  • fengren01
  • fengren01
  • 2012年02月01日 18:44
  • 630

Java多线程有哪几种实现方式? Java中的类如何保证线程安全? 请说明ThreadLocal的用法和适用场景(面试题)

Java多线程有哪几种实现方式? Java中的类如何保证线程安全? 请说明ThreadLocal的用法和适用场景 Java多线程有三种实现方式: (1)继承Thread类,重写run函数 (2)...
  • zhan3107006604
  • zhan3107006604
  • 2014年03月21日 13:51
  • 2654

谈谈敏捷开发的误区

今天有人做演讲有关敏捷开发的。就演讲而言,讲得非常好,吐字清晰,语速适当,穿插例子,娓娓道来,将意思表达得非常清楚到位,是个很好的演讲。但就内容而言,我却有很大的异议,当中部分观点我认为是对敏捷开发的...
  • flowingflying
  • flowingflying
  • 2013年01月23日 23:12
  • 2641

应该注意的搜索引擎营销的误区

内容提要:应该注意的搜索引擎营销的误区,搜索引擎营销行业在一定程度上弥漫着一些谎言或者误导。   搜索引擎营销行业在一定程度上弥漫着一些谎言或者误导。这些误导大多是由一些所谓的“搜索引擎优化专家...
  • axl19530209
  • axl19530209
  • 2015年01月21日 09:16
  • 194
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:ThreadLocal的几种误区
举报原因:
原因补充:

(最多只允许输入30个字)