我正在运行多次重复的模拟,我试图看看是否可以并行化这些重复以缩短计算时间。目前我只是在 for 循环中多次运行模拟,但理想情况下,这些可以同时运行,然后将每次重复的结果保存到数组中进行处理。目前我的代码类似于public static void getAllTheData(){ int nReps = 10; double[][] allResults = new double[nReps][] //this for loop is what I want to parallellise for(int r = 0; r < nReps; r++){ //run the simulation to completion here simulation.doStuffToCompletion() allResults[r] = simulation.getValues() }//average allResults here and do further analysis}我的问题是,如何同时并行运行所有这些重复,并将每次并行运行的结果保存在 allResults 类型的数组中?
2 回答
慕的地6264312
TA贡献1817条经验 获得超6个赞
您可以尝试类似并行流的方法来执行并行性,如下行之一。
Stream.of(allResults).parallel().forEach(i -> processData(i));
Arrays.stream(allResults).parallel().forEach(i -> processData(i));
眼眸繁星
TA贡献1873条经验 获得超9个赞
默认情况下,Java 是一种同步语言,要并行工作,您需要查看线程。我建议研究异步函数调用以及在 Java 中执行此操作的方法。
这是之前就此事提出的一个问题:How to asynchronously call a method in Java
通过异步调用,您可以在任意数量的线程上运行模拟,并在模拟运行完成时收集数据。
添加回答
举报
0/150
提交
取消