java - 为什么ThreadLocal 选择在线程中使用成员变量,而不是维护一个以线程为Key,值为value的集合?
阿神
阿神 2017-04-18 10:37:44
0
4
446
阿神
阿神

闭关修行中......

全部回覆(4)
大家讲道理

按照設計來說,ThreadLocal应该依附于Thread的存在而存在,每一个线程都可以有一份空间来存储,所以你说的第2点我非常赞同,至于第1点,我不太看得懂。
如果按照你的设计,将map放在ThreadLocal,那么这个map得是static的(或者ThreadLocal单例中的成员变量),这样在设计上存在严重问题,这个map將非常難以管理:

1. 试想有没有线程安全问题?
2. 线程销毁后怎么处理,不做处理这个map将会越来越大?

設計都有一套方法,甚至有關哲學,得細細品味。

黄舟

至少我能想到的一點就是:

減少互斥的代價

有一個場景: 為了提升DateFormat的效能, 一般會結合ThreadLocal.

刘奇

有些設計有時候並不是單純為了效能,要知道Java是最注重設計模式的,而單一職責是設計模式最重要的原則之一。
反過來說,在ThreadLocal裡直接實現一套Map豈不是比直接使用Map更快速度嗎,但顯然這麼做有違單一職責,也使得維護的成本更高。

迷茫

如果ThreadLoad直接使用Map為底層資料結構,當有大量的執行緒使用ThreadLocal時,首先Map存取的效能會下降,伴隨著執行緒生命週期,底層的Map還需要頻繁的新增刪除entity,這就很容易造成效能瓶頸。

熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板