Callable 和 Runable
Java 8 并发教程:Threads和Executors
 原文:Java 8 Concurrency Tutorial: Threads and Executors
 译者:BlankKelly
 来源:Java8并发教程:Threads和Executors
两种提交方式 submit和execute
submit如果输入runable,会重新再调回execute
 https://zhuanlan.zhihu.com/p/559735913
 https://zhuanlan.zhihu.com/p/642309734
 
Executors支持通过invokeAll()一次批量提交多个callable。这个方法结果一个callable的集合,然后返回一个future的列表。
ExecutorService executor = Executors.newWorkStealingPool();
List<Callable<String>> callables = Arrays.asList(
        () -> "task1",
        () -> "task2",
        () -> "task3");
executor.invokeAll(callables)
    .stream()
    .map(future -> {
        try {
            return future.get();
        }
        catch (Exception e) {
            throw new IllegalStateException(e);
        }
    })
    .forEach(System.out::println);
在这个例子中,我们利用Java8中的函数流(stream)来处理invokeAll()调用返回的所有future。我们首先将每一个future映射到它的返回值,然后将每个值打印到控制台。如果你还不属性stream,可以阅读我的Java8 Stream 教程。
Executor框架的UML图




















