在并行线程的一个执行循环之后打印输出

时间:2013-10-20 11:25:19

标签: java multithreading

我正在编写一个模拟game of life的多线程Java程序。每个单元有一个线程计算单元活动值的下一个值。我解决了%95问题线程正常工作和同步,但我无法弄清楚如何在每一步后打印出单元格矩阵。我的帖子中有以下运行方法:

public void run(){
  while(true){ //this may also be finite
    calculateNeighbourCount(); //threads count their alive neighbours
    calculateBarrier(); //Threads wait until all threads complete calculation before changing content
    next();//threads make cell's value the next computed value.
    nextBarrier(); //Threads wait until all threads complete next()
    //Here I want to print out cell matrix
  }
}

我能想到的一个可能的解决方案是考虑迭代次数来分配内存。例如,如果我有mxn单元矩阵和k次迭代,我需要mxnxk 3d数组。然后我在这个数组中存储具有适当索引的输出并在执行后输出。但是由于内存使用,这个解决方案似乎非常糟糕。当所有单元格一起更改时,我需要一种解决方法来打印矩阵的快照。

1 个答案:

答案 0 :(得分:1)

来自java文档:

  

CyclicBarrier支持运行一次的可选Runnable命令   每个障碍点,在聚会的最后一个线程到达之后,但是   在任何线程发布之前。这种屏障作用很有用   在任何一方继续之前更新共享状态。

您可以在文档here中看到一个示例,但通常,其中一个构造函数接受Runnable。您可以使用它在每个周期后进行打印。