美文网首页
ThreadLocal实现核心ThreadLocalMap

ThreadLocal实现核心ThreadLocalMap

作者: B_Crt | 来源:发表于2019-06-05 13:09 被阅读0次

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

static class Entry extends WeakReference<ThreadLocal<?>> {
            /** 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

      本文链接:https://www.haomeiwen.com/subject/eibjxctx.html