随笔 - 37  文章 - 29  trackbacks - 0


常用链接

留言簿(3)

随笔分类

随笔档案

最新评论

阅读排行榜

评论排行榜

java.lang.ThreadLocal
网上介绍ThreadLocal的文章也比较多。简单地说,ThreadLocal就是给多线程使用的,存放全局变量的一个变量池。可以简单地理解为,ThreadLocal维护了一个Map,这个Map的key就是每个线程,value就是要存放的变量。所以,每个Thread只是使用和维护了它自己存放进去的那个变量,并不会和其他线程共享一个变量。(当然,你如果让多个线程存进同一个变量引用,那就是你自己的事了)
当然,实际ThreadLocal的实现没有这么简单。我只看到了WebSphere JRE里的实现,它里面的map(类似map)的key就是一个关联了当前Thread的ThreadLocal变量。Sun的JRE里实现也应该大同小异吧。
需要注意的是:当我们使用线程池维护线程的时候,一个线程是可以被多次使用的。当某个线程在运行过程中抛出Exception却没有恢复在ThreadLocal中对应的变量对象。而当该线程在以后又一次被使用时,也没有很好地判断和初始化该变量,就有可能会出现一些问题。在使用了ThreadLocal的地方,都使用finally来处理善后工作。这些只是提醒我自己,因为目前项目中就遇到了这样的问题


posted on 2009-02-18 16:28 EvanLiu 阅读(691) 评论(1)  编辑  收藏 所属分类: Java基础

FeedBack:
# re: ThreadLocal学习 2009-03-04 23:12 gouflv
ThreadLocal的文章小弟这是第一次看到...

之前学hibernate的时候, myeclipse自动生成的SessionFactory里也看到这个方法, 呵 学习学习  回复  更多评论
  

只有注册用户登录后才能发表评论。


网站导航: