ThreadLocal类实现线程范围内数据共享

package cn.cblue.heima2;
import java.util.Random;
/**
 * @Description: ThreadLocal类实现线程范围内数据共享
 * @author huangzjb cblue2013@126.com
 * @Company Digital China
 * @date 2014-5-28 下午08:42:21
 * @version 1.0
 */
public class ThreadLocalTest3 {
	private static ThreadLocal<MyThreadScopeData1> myThreadScopeData = new ThreadLocal<MyThreadScopeData1>();
	public static void main(String[] args) {
		for (int i = 0; i < 2; i++) {
			new Thread(new Runnable() {
				public void run() {
					int data = new Random().nextInt();
					MyThreadScopeData myThreadScopeData = MyThreadScopeData
							.getThreadIntance();
					myThreadScopeData.setAge(data);
					myThreadScopeData.setName("name " + data);
					System.out.println(Thread.currentThread().getName()
							+ " has put data : " + data);
					new A().get();
					new B().get();
				}
			}).start();
		}
	}

	static class A {
		public void get() {
			MyThreadScopeData mydata = MyThreadScopeData.getThreadIntance();
			System.out.println("A from  " + Thread.currentThread().getName()
					+ " get data : name " + mydata.getName() + " :age "
					+ mydata.getAge());
		}
	}

	static class B {
		public void get() {
			MyThreadScopeData mydata = MyThreadScopeData.getThreadIntance();
			System.out.println("B from  " + Thread.currentThread().getName()
					+ " get data : " + mydata.getName() + " :age "
					+ mydata.getAge());
		}
	}
}


/**  
 * @Description: 每个线程产生与该线程绑定的唯一一个对象
 * @author huangzjb cblue2013@126.com
 * @Company Digital China
 * @date 2014-5-30 下午08:39:49
 * @version 1.0
 */

class MyThreadScopeData {
	private MyThreadScopeData() {
	}
	public static MyThreadScopeData getThreadIntance() {
		MyThreadScopeData instance = map.get(); 
		if (instance == null) {
			instance = new MyThreadScopeData();
			map.set(instance);
		}
		return instance;
	}

	private static ThreadLocal<MyThreadScopeData> map = new ThreadLocal<MyThreadScopeData>();
	private String name;
	private int age;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值