有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java在期货中的循环应该先检查isDone吗?

我有一份未来的清单

List<Future> futures = new ArrayList<Future>();

futures.add(task1());
futures.add(task2());

这两种获得结果的方法有区别吗

// Option 1
for (Future future : futures) {
  results.add(future.get());
}

// Option 2
boolean incompleteFound;
do {
 incompleteFound = false;
 for (Future future : futures) {
    if (!future.isDone()) {
      incompleteFound = true;
    }
 }
} while (incompleteFound);

for (Future future : futures) {
  results.add(future.get());
}

我假设在Option 1中,当get调用被阻塞时,这不会影响后台对未来的处理。我的假设正确吗


共 (2) 个答案

  1. # 1 楼答案

    对。做第一个。等待一个未来的结果不会影响其他任何一个(甚至你正在等待的结果)

    第二种方法不仅不必要,而且非常浪费。现在,不再将CPU让给其他线程,而是有一个繁忙的循环,它会无缘无故地旋转CPU消耗周期