将全局I / O参数传递给Java线程

时间:2013-11-26 06:42:23

标签: java multithreading

我有一个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会按原样进行更改。

可能是什么问题?看起来数组的元素是按值传递的,但不是这样。

提前谢谢你。

1 个答案:

答案 0 :(得分:0)

只有一个蓝色的猜测:
你的initalField必须是易失性的,否则它可能会被线程缓存而不会被更改(由其他线程看到),因为它们可以在本地缓存线程。

Thisthis回答可能会更好地解释它。