【问题标题】:Print output after parallel threads' one loop of execution在并行线程的一个循环执行后打印输出
【发布时间】:2013-10-28 21:34:27
【问题描述】:

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

【问题讨论】:

  • 所以你是说矩阵是共享的,属于所有线程?你想以thread-safe 的方式展示它吗?

标签: java multithreading


【解决方案1】:

来自 java 文档:

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

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

【讨论】:

猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-07
  • 2021-06-21
  • 1970-01-01
相关资源
最近更新 更多