论坛首页 Java企业应用论坛

ThreadLocal与synchronized

浏览 107635 次
精华帖 (8) :: 良好帖 (15) :: 新手帖 (9) :: 隐藏帖 (0)
作者 正文
   发表时间:2007-05-24  
jindw 写道

weiqingfei 写道
其实两个本来就没有关系,我想楼主只是想说如何在多线程中活用ThreadLocal。

ThreadLocal的实现本来就比较简单,只是用线程来作为key来寻找本线程中所使用的一个实例,它解决的最主要的问题应该就是减少参数的传递。


说句没有意义的话,事实上。ThreadLocal实现中,作为key的不是线程,而是ThreadLocal本身。


从整体上来看好吧。
不要看到ThreadLocalMap的key是ThreadLocal,就认为寻找线程本地变量实例的key就是ThreadLocal了。

要知道每个线程都会持有一个ThreadLocalMap的实例,我说的key就是这个意思。
key只是找到目标的钥匙,不是只有map才有key。
0 请登录后投票
   发表时间:2007-05-24  
weiqingfei 写道
jindw 写道

weiqingfei 写道
其实两个本来就没有关系,我想楼主只是想说如何在多线程中活用ThreadLocal。

ThreadLocal的实现本来就比较简单,只是用线程来作为key来寻找本线程中所使用的一个实例,它解决的最主要的问题应该就是减少参数的传递。


说句没有意义的话,事实上。ThreadLocal实现中,作为key的不是线程,而是ThreadLocal本身。


从整体上来看好吧。
不要看到ThreadLocalMap的key是ThreadLocal,就认为寻找线程本地变量实例的key就是ThreadLocal了。

要知道每个线程都会持有一个ThreadLocalMap的实例,我说的key就是这个意思。
key只是找到目标的钥匙,不是只有map才有key。


你的话也有道理,但是,说到这个细节,我还是要说一下,ThreadLocal要比我们简单的想象复杂的多,不单是一个变量存储,它的数据方Thread里面,很明显,在线程销毁时的清理任务。

可以说ThreadLocal是个系统级的API,比我们想象的要复杂一点。
0 请登录后投票
   发表时间:2007-05-24  
jindw 写道
weiqingfei 写道
jindw 写道

weiqingfei 写道
其实两个本来就没有关系,我想楼主只是想说如何在多线程中活用ThreadLocal。

ThreadLocal的实现本来就比较简单,只是用线程来作为key来寻找本线程中所使用的一个实例,它解决的最主要的问题应该就是减少参数的传递。


说句没有意义的话,事实上。ThreadLocal实现中,作为key的不是线程,而是ThreadLocal本身。


从整体上来看好吧。
不要看到ThreadLocalMap的key是ThreadLocal,就认为寻找线程本地变量实例的key就是ThreadLocal了。

要知道每个线程都会持有一个ThreadLocalMap的实例,我说的key就是这个意思。
key只是找到目标的钥匙,不是只有map才有key。


你的话也有道理,但是,说到这个细节,我还是要说一下,ThreadLocal要比我们简单的想象复杂的多,不单是一个变量存储,它的数据方Thread里面,很明显,在线程销毁时的清理任务。

可以说ThreadLocal是个系统级的API,比我们想象的要复杂一点。


其实用来区别线程间实例的key是线程本身,用来区分线程内部实例的key是ThreadLocal,因为每个线程不止一个内部实例。至于清理工作,那就是线程退出时清除对ThreadLocalMap引用,自然也就释放了实例。
你说的复杂指的是?
0 请登录后投票
   发表时间:2007-05-24  
糟糕的理解,糟糕的例子,基本同意birdGu的意见,不配评良好。
0 请登录后投票
   发表时间:2007-05-24  
终于找到详细的ThreadLocal介绍了
0 请登录后投票
   发表时间:2007-05-24  
汗。。。如果有其它的建议先看看别的。。
这翩文章很有争议性。
0 请登录后投票
   发表时间:2007-05-25  
XMLDB 写道
LZ把概念搞错了,ThreadLocal就是ThreadLocal,和同步完全没有关系。
ThreadLocal解决的是同一个线程内的资源共享问题,而synchronized 解决的是多个线程间的资源共享问题,两个问题没有可比性。

lz的文章并没有去讨论ThreadLocal就是ThreadLocal有什么关系,只是在说如何保证多线程环境下对共享资源访问的数据安全。文章看完了,简单明了,很到位,是篇好文章。
0 请登录后投票
   发表时间:2007-05-25  
不管怎么样,楼主还是蛮努力的,辛苦了
0 请登录后投票
   发表时间:2007-05-25  
spiritfrog 写道
XMLDB 写道
LZ把概念搞错了,ThreadLocal就是ThreadLocal,和同步完全没有关系。
ThreadLocal解决的是同一个线程内的资源共享问题,而synchronized 解决的是多个线程间的资源共享问题,两个问题没有可比性。

lz的文章并没有去讨论ThreadLocal就是ThreadLocal有什么关系,只是在说如何保证多线程环境下对共享资源访问的数据安全。文章看完了,简单明了,很到位,是篇好文章。


麻烦你解释一下,ThreadLocal是怎么“保证多线程环境下对共享资源访问的数据安全”的?ThreadLocal使各个线程使用各自不同的数据,这种情况下哪来的“共享资源”?
0 请登录后投票
   发表时间:2007-05-25  
楼主申诉后俺才评的新手帖.
不过没想...
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics