-1
我有一個Java程序創建線程,每個線程執行相同的代碼(相同的run())。將全局I/O參數傳遞給Java線程
我主要的樣子:
{
// 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是一個全球性的二維數組。每個線程都應該對其進行一些更改。 問題是,在線程執行後,即使只有一個工作線程,該數組也保持不變。然而,當我運行
threads[i][j].run();
代替
(new Thread(threads[i][j])).start();
與單個工作線程(由主線程即純串行執行)的initalField變化,它應。
可能是什麼問題?它看起來像數組的元素是通過值傳遞的,但它不可能如此。
預先感謝您。
顯示您的GameOfLifeThread代碼。 – wxyz
可能您對initialField的訪問不同步。 – kofemann
@tigran:這也是我的想法,這就是我答案中的不穩定因素。 – Burkhard