首页 > 编程语言 > 详细

java 之ThreadLocal

时间:2015-04-04 23:50:21      阅读:387      评论: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
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!