ThreadLocalのテスト
4643 ワード
package com.ddc.mem;
public class ThreadLocalTestMain {
ThreadLocal<AddInteger> localArgs=new ThreadLocal<AddInteger>();
AddInteger intance=new AddInteger();
public void mainTest(){
for(int i=0 ;i<10;i++){
ThreadTest thread=new ThreadTest(i);
thread.start();
try {
Thread.sleep(10000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
class ThreadTest extends Thread {
public ThreadTest(int name) {
this.setName("DdcThread-"+name);
}
@Override
public void run() {
localArgs.set(intance);
intance.inc(100);
for(int i=0;i<30;i++){
AddInteger intThis=localArgs.get();
intThis.inc(1);
System.out.println(this.getName()+":"+intThis);
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}
/**
* @param args
*/
public static void main(String[] args) {
ThreadLocalTestMain main=new ThreadLocalTestMain();
main.mainTest();
}
}
class AddInteger {
private int i=0;
public void inc(int inc){
i=i+inc;
}
public int getI(){
return i;
}
}
私の理解は、ThreadLocalは実際にはIdentityHashMapに相当し、そのkeyは現在のスレッドであり、valueは現在のスレッド呼び出しsetメソッドが設定した値である.