ThreadLocal实现核心ThreadLocalMap

ThreadLocal的使用就是,你在一个类中定义了这么类型的一个变量,不同的线程环境中get,set使用这个变量,会在各自的线程环境中保存各自的值。可以通过重写initialValue()为这个变量赋予初始值,默认为null。
ThreadLocal是如何各个线程都有自己对应于这个变量的值的呢?如果是你,你会怎么去实现呢?
java的设计是:ThreadLocalMap去真正的保存和存储值,每个线程都有自己的ThreadLocalMap。通过ThreadLocal的实例作为key去映射到对应的entry。

static class Entry extends WeakReference> {
            /** The value associated with this ThreadLocal. */
            Object value;

            Entry(ThreadLocal k, Object v) {
                super(k);
                value = v;
            }
        }

这里为什么要放出Entry的源码,因为这里有一个指的思考的地方:为什么对key(ThreadLocal)使用弱引用?因为ThreadLocalMap都是线程持有的,强引用会导致ThreadLocal的泄漏。如果还用了匿名内部类的方式使用了ThreadLocal那将导致更多对象的泄漏!

最后,ThreadLocal还有一个蛮有意思的点:
没有直接使用Object的hashcode。神奇数字0x61c88647可以看看。

你可能感兴趣的:(ThreadLocal实现核心ThreadLocalMap)