gpt4 book ai didi

java - 通过 ExecutorService 在 Thread 中所做的更改在执行后未反射(reflect)出来

转载 作者:行者123 更新时间:2023-12-01 09:04:11 29 4
gpt4 key购买 nike

我在 ExecutorService 和 Futures 列表的帮助下用 Java 创建了一个线程池。我创建了一个 RandomProcess 类,它实现 Callable 接口(interface)并重写 call 方法执行某些操作。

看起来像这样:

public class RandomProcess implements Callable<Integer> {
private Result result;

public RandomProcess(Result result) {
super();
this.result = result;
}

@Override
public Integer call() throws Exception {
//performSomeOps returns a Result that has certain values that I need
result = performSomeOps();
return 1;
}

我在这个类中有一个 Result 对象,它应该反射(reflect)所做的更改在随机进程线程中。不幸的是,当我返回此结果时,更改并未反射(reflect)出来。

public class Abc{
public Result check(){
Result result = new Result(true);
try {
ExecutorService exec = Executors.newFixedThreadPool(7);
List<Future<?>> futures = new ArrayList<Future<?>>(7);
for (Entity entity : randomListOfEntities) {
futures.add(exec.submit(new RandomProcess(result)));
}
for (Future<?> f : futures) {
f.get(); // wait for a process to complete
}
exec.shutdown();
}
} catch (Exception e) {
e.printStackTrace();
}
return result;
}
}

无法找出问题所在。

最佳答案

在线结果 = PerformSomeOps();您没有更新提交线程时传递的结果内的值。您只是在该行分配新对象,而不是更改原始对象。您需要更新结果对象内的值(Something link result.setSomevalue() = PerformSomeOps().getSomeValue()) 或将结果对象传递给performSomeOps(),并更新该方法内的结果。

关于java - 通过 ExecutorService 在 Thread 中所做的更改在执行后未反射(reflect)出来,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41422845/

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