【发布时间】:2013-08-27 01:32:59
【问题描述】:
这个问题可能很容易回答,但我就是不明白。 我减少了我的问题,直到留下一小段代码以找到这个问题的“起源”: 我正在尝试用循环填充线程的 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'是问题吗?
感谢任何形式的帮助! 提前致谢!
【问题讨论】:
-
u是静态的,因此您将始终获得当前值(10当您的程序运行时)。您没有保存在任何地方创建线程时使用的值。 -
如果你的线程列表只从一个线程(主线程?)访问,你不需要同步使用它。
标签: java multithreading arraylist