</pre><pre name="code" class="java">public class Test {
public static void main(String[] args) {
ThreadLocalTest threadLocalTest = new ThreadLocalTest();
ThreadLocalTest threadLocalTest1 = new ThreadLocalTest();
ThreadLocalTest threadLocalTest2 = new ThreadLocalTest();
threadLocalTest.start();;
threadLocalTest1.start();;
threadLocalTest2.start();;
}
}
public class ThreadLocalTest extends Thread {
public void run() {
for(int i=0;i<4;++i){
System.out.println(Thread.currentThread().getName()+" "+Counter.getNextValue());
}
}
}
public class Counter {
private static ThreadLocal<Integer> threadLocals = new ThreadLocal<Integer>() {
protected Integer initialValue() {
return 10;
}
};
public static Integer get() {
return threadLocals.get();
}
public static void set(Integer value) {
threadLocals.set(value);
}
public static Integer getNextValue() {
// System.out.println(threadLocals.get());
threadLocals.set(threadLocals.get() + 1);
return threadLocals.get();
}
}
//线程内部是通过threadlocal操作的,不同线程之间是通过thread内部变量threadlocalmap操作的,threadlocalmap中存放的是threadlocal和value