多线程学习笔记四

/**
 * 线程范围内的数据共享
 * 
 * 应用场景:减少库存量,增加流水账和修改总账 ,这几个操作要在同一个事务中, 事务需要放在线程范围内
 * 
 * 
 * @time 上午10:10:13
 * @author retacn yue
 * @Email zhenhuayue@sina.com
 */
public class ThreadLocalTest {


/**
* @param args
*/
public static void main(String[] args) {
final A a = new A();
final B b = new B();
for (int i = 0; i < 5; i++) {
new Thread() {


@Override
public void run() {
// MyThreadLocalData.set(new Random().nextInt(10000));
// System.out.println(Thread.currentThread() + ":has put " +
// MyThreadLocalData.get());


// a.say();
// b.sayHello();


MyThreadLocalData.getMyThreadLocalInstance().setNum(new Random().nextInt(10000));
System.out.println(Thread.currentThread() + ":has put " + MyThreadLocalData.getMyThreadLocalInstance().getNum());


a.say();
b.sayHello();
MyThreadLocalData.clear();


}


}.start();
}
}
}


/**
 * 存放全局变量
 * 
 * @time 上午10:27:49
 * @author retacn yue
 * @Email zhenhuayue@sina.com
 */
class MyThreadLocalData {
/*
* private static ThreadLocal tl = new ThreadLocal();

* public static Object get() { return tl.get(); }

* public static void set(Object value) { tl.set(value); }
*/
private static ThreadLocal instanceContainer = new ThreadLocal();


/**
* 构造器
*/
private MyThreadLocalData() {
}


/**
* 单例

* @return
*/
public static MyThreadLocalData getMyThreadLocalInstance() {
MyThreadLocalData instance = (MyThreadLocalData) instanceContainer.get();
if (null == instance) {
instance = new MyThreadLocalData();
instanceContainer.set(instance);
}


return instance;
}


/**
* 清除
*/
public static void clear() {
instanceContainer.remove();
}


private Integer x;


public void setNum(Integer x) {
this.x = x;
}


public Integer getNum() {
return x;
}


}


class A {
public void say() {
// System.out.println(Thread.currentThread() + ":A has geted " +
// MyThreadLocalData.get());


System.out.println(Thread.currentThread() + ":A has geted " + MyThreadLocalData.getMyThreadLocalInstance().getNum());


}
}


class B {
public void sayHello() {
// System.out.println(Thread.currentThread() + ":B has geted " +
// MyThreadLocalData.get());


System.out.println(Thread.currentThread() + ":B has geted " + MyThreadLocalData.getMyThreadLocalInstance().getNum());
}
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值