Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/311.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
将全局I/O参数传递给Java线程_Java_Multithreading - Fatal编程技术网

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

将全局I/O参数传递给Java线程,java,multithreading,Java,Multithreading,我有一个Java程序,它创建线程,每个线程执行相同的代码(相同的run() 我的主要想法是: { // Create threads GameOfLifeThread[][] threads = new GameOfLifeThread[vSplit][hSplit]; for(int i=0; i<vSplit; i++){

我有一个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 ...;
    }
而不是

(new Thread(threads[i][j])).start();
对于单个工作线程(即主线程的纯串行执行),initalField会按其应该的方式进行更改

有什么问题吗?看起来数组的元素是按值传递的,但事实并非如此


先谢谢你

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


答案可能会解释得更清楚一些。

展示你的GameofLiethread代码。可能你对initialField的访问没有同步。@tigran:这也是我的想法,这就是我答案中的volatile所做的。@Burkhard volatile可能是解决方案,但是我们不能不看到实际的代码就这样说,因为任何并发访问协调都不能用volatile字段来解决。@tigran:是的,我想在这种情况下我们永远不会知道。。。
(new Thread(threads[i][j])).start();