美文网首页
threadlocal

threadlocal

作者: Ary_zz | 来源:发表于2019-10-24 11:43 被阅读0次

2019-02-18

https://juejin.im/post/59db31c16fb9a00a4843dc36

image.png

由于session与线程关联,而Tomcat这些web服务器多采用线程池机制,也就是说线程是可以复用的,所以在每次进入的时候都需要重新进行set操作,或者使用完毕以后及时remove掉!

 public void remove() {
         ThreadLocalMap m = getMap(Thread.currentThread());       
         if (m != null)       
             m.remove(this);
}

每个Thread中都存在一个map等待初始化,当设置一个ThreadLocal对象时,会把一个Entry存入map中,key为这个ThreadLocal变量,value为存储的值

    /**
     * Sets the current thread's copy of this thread-local variable
     * to the specified value.  Most subclasses will have no need to
     * override this method, relying solely on the {@link #initialValue}
     * method to set the values of thread-locals.
     *
     * @param value the value to be stored in the current thread's copy of
     *        this thread-local.
     */
    public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null) {
            map.set(this, value);
        } else {
            createMap(t, value);
        }
    }

相关文章

网友评论

      本文标题:threadlocal

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