这个问题可能很容易回答,但我就是不明白。
为了找到这个问题的“根源”,我缩小了问题范围,只剩下这段代码:
我试图使用循环来填充一个线程的ArrayList。
public static int u=0;
public void test(){
while (u <10) {
synchronized(threadList){
threadList.add(u, new Thread(){
@Override public void run(){
System.out.println("Thread at Index: " + u);
}
});
}
u++;
}
threadList.get(2).start();
}
我想通过在索引“2”上启动线程来测试上面的循环。我期望控制台显示“线程索引为:2”,但实际上是这样显示的:“线程索引为:10”。无论我在“.get(int)”方法中写入哪个整数,我都会收到索引为“10”的结果。
为什么会这样?如何解决?
线程的创建似乎是有效的...那么整数'u'是问题所在吗?
感谢您的任何帮助!