gpt4 book ai didi

java - 在 Java 中运行动态数量的线程并返回值

转载 作者:行者123 更新时间:2023-12-02 04:24:26 27 4
gpt4 key购买 nike

所以基本上我正在尝试实现遗传算法,但让我担心的部分是优化。我正在尝试创建一个类来检查每个节点的适用性,但是我想运行同时检查,因为数据在检查过程中不会改变,并且对于每个线程都是相同的。我想到的是:

// check the gene for overlaps in room reservation
for (int i=0;i<nrRooms;i++){
FitnessThread thread = new FitnessThread(chromosome);
}

通过线程的 run 函数执行检查代码并用违规次数填充一个整数,以缩短它:

for(int j=0; j<individualLength; j++){
if(chromosome.getGene((offset*individualLength)+j) *
chromosome.getGene((offsetNext*individualLength)+j) != 0){
violations++;
}
}

我的问题是,如何从每个单独的线程中收集违规行为,而不以线性过程结束。我可以声明一个线程数组,然后同时启动它们,并在它们执行后单独收集每个线程吗?或者还有其他方法吗?

提前致谢

最佳答案

您可以创建Callable并将它们提交到执行程序池,然后使用Future.get();检索它们的结果。

ExecutorService executor = Executors.newFixedThreadPool(4); // or another kind of executor
List<Future<Foo>> futures = new ArrayList<>();
for(int i = 0;i < nrRooms; i++) {
futures.add(executor.submit(new FitnessCallable(chromosome)));
}
...
// Time to check the results
for(Future<Foo> f : futures) {
Foo result = f.get(); // Block and get the result
}

关于java - 在 Java 中运行动态数量的线程并返回值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32372554/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com