ThreadLocal

ThreadLocal使用线程私有方式解决变量共享问题,主要运用在全局设置.

简单事例代码(来自java特种兵)

package com.ydy.thread.treadlocal;
/**
 * 
 * @author ydy
 * */
public class TreadLocalTest {

	static class ResourceClass{
		public final static ThreadLocal<String> RESOURCE_1=new ThreadLocal<>();
		public final static ThreadLocal<String> RESOURCE_2=new ThreadLocal<>();
	}
	static class A{
		public void setOne(String value) {
			ResourceClass.RESOURCE_1.set(value);
		}
		public void setTwo(String value) {
			ResourceClass.RESOURCE_2.set(value);
		}
	}
	
	static class B{
		public void display() {
			System.out.println(ResourceClass.RESOURCE_1.get()+":"+ResourceClass.RESOURCE_2.get());			
		}
	}
	
	public static void main(String[] args) {
		final A a=new A();
		final B b=new B();
		for(int i=0;i<15;i++) {
			final String resource1="线程-"+i;
			final String resource2=i+"";
			new Thread(new Runnable() {
				
				@Override
				public void run() {
					// TODO Auto-generated method stub
					try {
						a.setOne(resource1);
						a.setTwo(resource2);
						b.display();
					} catch (Exception e) {
						// TODO: handle exception
						e.printStackTrace();
					}finally {
						ResourceClass.RESOURCE_1.remove();
						ResourceClass.RESOURCE_2.remove();
					}
					
					
				}
			}).start();
		}
	}
}

实现原理

 public void set(T value) {
        Thread t = Thread.currentThread();
        ThreadLocalMap map = getMap(t);
        if (map != null)
            map.set(this, value);
        else
            createMap(t, value);
    }

 void createMap(Thread t, T firstValue) {
        t.threadLocals = new ThreadLocalMap(this, firstValue);
    }

 

转载于:https://my.oschina.net/u/2446173/blog/3008436

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值