我有一个Java程序,它创建每个执行相同代码的线程(相同的run())。
我的主要看起来像:
{
// Create threads
GameOfLifeThread[][] threads = new GameOfLifeThread[vSplit][hSplit];
for(int i=0; i<vSplit; i++){
for(int j=0; j<hSplit; j++){
threads[i][j] = new GameOfLifeThread(initalField, ...);
}
}
// Run threads
for(int i=0; i<vSplit; i++){
for(int j=0; j<hSplit; j++){
// threads[i][j].run();
(new Thread(threads[i][j])).start();
}
}
return ...;
}
initialField是一个全局2D数组。每个线程都应该对它进行一些更改。 问题是线程执行后,即使只有一个工作线程,数组也保持不变。但是,当我跑
时threads[i][j].run();
而不是
(new Thread(threads[i][j])).start();
使用单个工作线程(即主线程的纯串行执行),initalField会按原样进行更改。
可能是什么问题?看起来数组的元素是按值传递的,但不是这样。
提前谢谢你。