threadlocal 的例子 自己写的(2)

[quote]
1. 用Processor ,这个类有一个变量 localVal是 threadLocal 变量, 在两个thread作用下,会把这个变量在自己的线程内分别复制一份,这样不会有累计加一的情况发生, 只会把locaVal在两个方法内进行自己的加一动作 。

2. 用Processor2 , 这个类的变量localVal 是一个Integer类型的,而作为资源传入的Processor2对象, 因为没用使用threadLocal的方式, 所以这个变量被两个线程共享, 会被加两次。

[/quote]



package com.ssc.dbcttool.test;


public class PatternExec {

public static void main(String[] args) {
Exec onlyOne = new Processor();
//Exec onlyOne = new Processor2();

Thread t1 = new DoThingThread(onlyOne);
Thread t2 = new DoThingThread(onlyOne);

t1.start();
t2.start();

}



}

class DoThingThread extends Thread{

private Exec only;

public DoThingThread(Exec onlyOne){
only = onlyOne;
}

@Override
public void run() {

only.firstActionToPrepare().secondAction();

}

}







package com.ssc.dbcttool.test;

public interface Exec {
public Exec firstActionToPrepare();

public void secondAction();
}





package com.ssc.dbcttool.test;

public class Processor implements Exec{

private ThreadLocal<Integer> localVal = new ThreadLocal<Integer>();


public Exec firstActionToPrepare(){
if(localVal.get()!=null){
Integer oldVal = localVal.get();
localVal.set(Integer.valueOf(oldVal.intValue() + 1));
}else{
localVal.set(Integer.valueOf(1));
}

return this;
}

public void secondAction(){
System.out.println(localVal.get());
}
}




package com.ssc.dbcttool.test;

public class Processor2 implements Exec{

private Integer localVal = new Integer(0);


public Exec firstActionToPrepare(){

localVal++;

return this;
}

public void secondAction(){
System.out.println(localVal);
}
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值