已经明白了ThreadLocal实现了原理,
但是还是有些疑问,现在的实现是在Thread内维护了一个ThreadLocalMap,
而不是在ThreadLocal里面维护一个map然后用Thread用做Key,需要存的值为value呢?
看见有人说
这样设计之后每个Map的Entry数量变小了:之前是Thread的数量,现在是ThreadLocal的数量,能提高性能,据说性能的提升不是一点两点
当Thread销毁之后对应的ThreadLocalMap也就随之销毁了,能减少内存使用量.
第2点觉得还能理解一些,第一点的话为什么可以提高性能呢?
原来的只需要维护一个集合就好了,如果用了现在的实现,虽然维护的Entry数量变少了,但是维护的集合不是变多了吗?难道是因为创建集合消耗的性能更低吗?
还是因为在特殊的环境下,的确会发生需要维护少量Entry性能更高?在Android开发环境下会遇到这种情况吗?
按照设计来说,
ThreadLocal
应该依附于Thread
的存在而存在,每一个线程都可以有一份空间来存储,所以你说的第2点我非常赞同,至于第1点,我不太看得懂。如果按照你的设计,将
map
放在ThreadLocal
,那么这个map
得是static
的(或者ThreadLocal
单例中的成员变量),这样在设计上存在严重问题,这个map
将非常难以管理:设计都有一套方法,甚至有关哲学,得细细品味。