ThreadLocal好难啊!!!
scmod 2014-10-09 08:57:18 package com.cc;
public class ThreadLocalDemo extends Thread {
public static ThreadLocal<Integer> threadLocal = new ThreadLocal<Integer>() {
@Override
protected Integer initialValue() {
return i;
}
};
public static int i = 0;
public static void main(String[] args) {
Thread t1 = new ThreadLocalDemo();
Thread t2 = new ThreadLocalDemo();
Thread t3 = new ThreadLocalDemo();
t1.start();
t2.start();
t3.start();
}
@Override
public void run() {
for(int n=0; n<3; n++) {
i = threadLocal.get();
i++;
// threadLocal.set(i);
threadLocal.remove();
System.out.println(currentThread().getName() + " i=" + i);
}
// for(int n=0; n<3; n++) {
// i++;
// System.out.println(currentThread().getName() + " i=" + i);
// }
}
}
本来只是试下多个副本。。
结果无聊改了下initialValue返回i
然后看看remove什么效果
然后就看不懂了。。。。
结果出来各式各样
单步调试结果就正常点。
不知道为什么
Thread-2 i=1
Thread-1 i=1
Thread-0 i=1
Thread-1 i=3
Thread-2 i=2
Thread-1 i=5
Thread-0 i=4
Thread-0 i=7
Thread-2 i=6,,,,
还有这样的。。。
Thread-1 i=1
Thread-1 i=2
Thread-1 i=3
Thread-0 i=1
Thread-0 i=2
Thread-0 i=3
Thread-2 i=2
Thread-2 i=4
Thread-2 i=5
单步貌似就是下面这样 的比较正常 的。。。
Thread-2 i=1
Thread-2 i=2
Thread-0 i=3
Thread-1 i=4
Thread-1 i=5
Thread-1 i=6
Thread-2 i=7
Thread-0 i=8
Thread-0 i=9
调试出来貌似有时候还会报
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183): [../../../src/share/back/util.c:838]
这么个东西。。。
然后,然后就不懂了。。。
怎么就各种混乱了。。。