У меня есть два вопроса: 1. Что является простейшей канонической формой для запуска Callable
в качестве задачи на Java 8, захвата и обработки результата? 2. В приведенном ниже примере, какой самый лучший/самый простой/ясный способ провести основной процесс до тех пор, пока все задачи не будут завершены?Java 8 Concurrency Простая каноническая форма для основной задачи
Вот пример, который у меня есть до сих пор - это лучший подход в 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()
в пользу лучшего подхода?