码迷,mamicode.com
首页 > 编程语言 > 详细

java 之ThreadLocal

时间:2015-04-04 23:52:57      阅读:416      评论:0      收藏:0      [点我收藏+]

标签:

通过 ThreadLocal 能数据保存在一个线程中,而且不需要 lock 同步。理论上 ThreadLocal 可

以让一个变量在每个线程都有一个副本。 ThreadLocal 常用来屏蔽线程的私有变量,例如“并

发事务”或者其他的资源。而且,它还被用来维护每个线程的计数器,统计,或者 ID 生成

器。


由ThreadLocal常用的get方法定义看:

  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();

    }


 ThreadLocalMap getMap(Thread t) {

        return t.threadLocals;

    }


可以知道,每个Thread内部都有一个ThreadLocal.ThreadLocalMap threadLocals;这个map的维护是由ThreadLocal表现.而且它的初始化是lazily.

每个ThreadLocal当前的nextHashCode的生成,以及它在ThreadLocalMap内部数组的索引的生成可以看源代码.


java 之ThreadLocal

标签:

原文地址:http://my.oschina.net/doctor2014/blog/396162

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!