0

我正在编写一个模拟生活游戏的多线程 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 数组。然后我在这个数组中存储具有适当索引的输出,并在执行后输出。但是由于内存使用,这个解决方案似乎非常糟糕。当所有单元格一起更改时,我需要一种解决方法来打印矩阵的快照。

4

1 回答 1

1

从java文档:

CyclicBarrier 支持一个可选的 Runnable 命令,该命令在每个屏障点运行一次,在队伍中的最后一个线程到达之后,但在任何线程被释放之前。此屏障操作对于在任何一方继续之前更新共享状态很有用。

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

于 2013-10-20T11:54:49.420 回答