ThreadLocal in Java

I have read source code and review some posts at JavaEye. So write a bit idea here.



  • ThreadLocal relation with Thread.
  • How to store resources for each Thread  separately.

public class Thread implements Runnable {


    /* ThreadLocal values pertaining to this thread. This map is maintained
	 * by the ThreadLocal class. */
	ThreadLocal.ThreadLocalMap threadLocals = null;


} 


public class ThreadLocal<T> {

    public T get() {
		Thread t = Thread.currentThread();
		ThreadLocalMap map = getMap(t);
		if (map != null) {
			return (T) map.get(this);
		}

		// Maps are constructed lazily.  if the map for this thread
		// doesn't exist, create it, with this ThreadLocal and its
		// initial value as its only entry.
		T value = initialValue();
		createMap(t, value);
		return value;
	}


    /**
	 * Sets the current thread's copy of this thread-local variable
	 * to the specified value.  Many applications will have no need for
	 * this functionality, relying solely on the {@link #initialValue}
	 * method to set the values of thread-locals.
	 *
	 * @param value the value to be stored in the current threads' copy of
	 *        this thread-local.
	 */
	public void set(T value) {
		Thread t = Thread.currentThread();
		ThreadLocalMap map = getMap(t);
		if (map != null) {
// each Thread owns a  ThreadLocalMap, and the map just store only one value.
                        map.set(this, value);  
                }
                 else {
			createMap(t, value);
		}
	}


     /**
	 * Get the map associated with a ThreadLocal. Overridden in
	 * InheritableThreadLocal.
	 *
	 * @param  t the current thread
	 * @return the map
	 */
	ThreadLocalMap getMap(Thread t) {
		return t.threadLocals;
	}

}
   
 
See more @ http://www.iteye.com/topic/103804

 

 

–end–


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值