首页
随机
最近更改
特殊页面
社群首页
参数设置
关于WHY42
免责声明
WHY42
搜索
用户菜单
登录
欢迎来到Riguz的小站!这是一个私人wiki,用来记录一些我的笔记。
查看“︁Java ThreadLocal”︁的源代码
←
Java ThreadLocal
因为以下原因,您没有权限编辑该页面:
您请求的操作仅限属于该用户组的用户执行:
用户
您可以查看和复制此页面的源代码。
= ThreadLocal原理 = 每个Thread中维护了一个<span class="article-label">ThreadLocal.ThreadLocalMap</span>的对象来存储: * 这个变量默认是null,会在线程第一次调用get方法的时候初始化。 * 这个map维护了ThreadLocal对象与值的映射。<syntaxhighlight lang="java" inline>map.set(this, value);</syntaxhighlight> <syntaxhighlight lang="java"> public T get() { Thread t = Thread.currentThread(); ThreadLocalMap map = getMap(t); if (map != null) { ThreadLocalMap.Entry e = map.getEntry(this); if (e != null) { @SuppressWarnings("unchecked") T result = (T)e.value; return result; } } return setInitialValue(); } </syntaxhighlight> <syntaxhighlight lang="java"> /* ThreadLocal values pertaining to this thread. This map is maintained * by the ThreadLocal class. */ ThreadLocal.ThreadLocalMap threadLocals = null; /* * InheritableThreadLocal values pertaining to this thread. This map is * maintained by the InheritableThreadLocal class. */ ThreadLocal.ThreadLocalMap inheritableThreadLocals = null; </syntaxhighlight> = WeakReference = 这个map中的key使用了WeakReference, <syntaxhighlight lang="java"> static class Entry extends WeakReference<ThreadLocal<?>> </syntaxhighlight> [[Category:Concurrency]]
返回
Java ThreadLocal
。