package net.tianyu.test;
public class TestThreadLocal {
static Calc calc_ = new Calc();
public static void main(String[] args) throws Exception {
new Thread(new WorkThread()).start();
new Thread(new WorkThread()).start();
}
static class WorkThread implements Runnable {
public void run() {
calc_.init();
for (int i = 0; i < 10; i++) {
try {
calc_.addOne();
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
static class Data {
int intData = 0;
String strData = "";
}
static class Calc {
ThreadLocal<Data> sum_ = new ThreadLocal<Data>();
Integer sum2_;
void init() {
Data value = new Data();
sum_.set(value);
sum2_ = new Integer(0);
}
void addOne() {
Data value = sum_.get();
value.intData++;
value.strData = new Integer(value.intData).toString();
String threadName = Thread.currentThread().getName();
System.out.println(threadName + " ThreadLocal " + value.strData);
sum2_ = sum2_ + 1;
System.out.println(threadName + " Integer " + sum2_.toString());
}
}
}
结果如下
Thread-0 ThreadLocal 1
Thread-1 ThreadLocal 1
Thread-0 Integer 1
Thread-1 Integer 1
Thread-0 ThreadLocal 2
Thread-1 ThreadLocal 2
Thread-1 Integer 2
Thread-0 Integer 3
Thread-1 ThreadLocal 3
Thread-1 Integer 4
Thread-0 ThreadLocal 3
Thread-0 Integer 5
Thread-1 ThreadLocal 4
Thread-1 Integer 6
Thread-0 ThreadLocal 4
Thread-0 Integer 7
Thread-1 ThreadLocal 5
Thread-0 ThreadLocal 5
Thread-0 Integer 8
Thread-1 Integer 9
Thread-0 ThreadLocal 6
Thread-0 Integer 10
Thread-1 ThreadLocal 6
Thread-1 Integer 11
Thread-0 ThreadLocal 7
Thread-0 Integer 12
Thread-1 ThreadLocal 7
Thread-1 Integer 13
Thread-1 ThreadLocal 8
Thread-0 ThreadLocal 8
Thread-0 Integer 14
Thread-1 Integer 14
Thread-0 ThreadLocal 9
Thread-0 Integer 15
Thread-1 ThreadLocal 9
Thread-1 Integer 16
Thread-0 ThreadLocal 10
Thread-0 Integer 17
Thread-1 ThreadLocal 10
Thread-1 Integer 18