我有两个问题: 1.Callable
在 Java 8 中将 a 作为任务运行、捕获和处理结果的最简单规范形式是什么?2. 在下面的示例中,保持主进程打开直到所有任务完成的最佳/最简单/最清晰的方法是什么?
这是我到目前为止的示例——这是 Java 8 中最好的方法还是有更基本的方法?
import java.util.*;
import java.util.concurrent.*;
import java.util.function.*;
public class SimpleTask implements Supplier<String> {
private SplittableRandom rand = new SplittableRandom();
final int id;
SimpleTask(int id) { this.id = id; }
@Override
public String get() {
try {
TimeUnit.MILLISECONDS.sleep(rand.nextInt(50, 300));
} catch(InterruptedException e) {
System.err.println("Interrupted");
}
return "Completed " + id + " on " +
Thread.currentThread().getName();
}
public static void main(String[] args) throws Exception {
for(int i = 0; i < 10; i++)
CompletableFuture.supplyAsync(new SimpleTask(i))
.thenAccept(System.out::println);
System.in.read(); // Or else program ends too soon
}
}
有没有更简单、更清晰的 Java-8 方法来做到这一点?以及如何消除有System.in.read()
利于更好的方法?