ThreadLocal原理

感情迁移 提交于 2020-03-17 11:06:04

ThreadLocal作用

ThreadLocal是一个线程内部的数据存储类,通过它可以在指定的线程中存储数据,数据存储以后,只有在指定的线程中可以获取到存储的数据,对于其他线程来说则无法取到数据。

ThreadLocal源码

// Thread类中持有ThreadLocalMap,这个ThreadLocalMap里的Entry是继承WeakReference,hash冲突解决法是 开放地址法
ThreadLocal.ThreadLocalMap threadLocals = null;
// 由于ThreadLocalMap是跟随着具体的线程,所以自然get()时是获取当前线程的东西不会获取其他线程的数据。

public T get() {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
        	// 以自身为key,因为一个线程可以存多个不同的ThreadLocal的东西
            ThreadLocalMap.Entry e = map.getEntry(this);
            if (e != null) {
                @SuppressWarnings("unchecked")
                T result = (T)e.value;
                return result;
            }
        }
        return setInitialValue();
    }

总结

ThreadLocal对象自身作为key,用来访问存在Thread对象中的数据。

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!