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基础