Java 在这方面,未来和完全未来的区别是什么? 用例示例

Java 在这方面,未来和完全未来的区别是什么? 用例示例,java,java-8,future,completable-future,Java,Java 8,Future,Completable Future,在下面的示例中,使用future和completable future有什么区别 我读到的一个主要用途是在completable future中使用.apply(),您可以连接多个方法 Future不是这样的吗?在一个方法()中连接方法,并在一个单独的线程中调用该方法(){连接它们的方法} 我发现他们两个做着同样的事情。谁能解释一下吗 class FutureExample { static boolean method1() { return true; }

在下面的示例中,使用future和completable future有什么区别

我读到的一个主要用途是在completable future中使用.apply(),您可以连接多个方法

Future不是这样的吗?在一个方法()中连接方法,并在一个单独的线程中调用该方法(){连接它们的方法}

我发现他们两个做着同样的事情。谁能解释一下吗

class FutureExample {

    static boolean method1() {
        return true;
    }
    static boolean method2(boolean m) {
        return m;
    }

    static boolean method() {
        boolean v = method1();
        return method2(v);
    }

    public static void main(String[] args) {
        ExecutorService service = Executors.newFixedThreadPool(1); //initialize to 1 for stackoverflow question
        Future<Boolean> future = service.submit(FutureExample::method);
    }
}

VERSUS

class CompletableFutureExample {

    static boolean method1() {
        return true;
    }
    static boolean method2(boolean m) {
        return m;
    }

    public static void main(String[] args) {
        CompletableFuture<Boolean> future = CompletableFuture.supplyAsync(CompletableFutureExample::method1).thenApply(CompletableFutureExample::method2);
    }
}
class FutureExample{
静态布尔方法1(){
返回true;
}
静态布尔方法2(布尔m){
返回m;
}
静态布尔方法(){
布尔v=method1();
返回方法2(v);
}
公共静态void main(字符串[]args){
ExecutorService=Executors.newFixedThreadPool(1);//对于stackoverflow问题,初始化为1
Future=service.submit(futurexample::method);
}
}
对
类CompletableFutureExample{
静态布尔方法1(){
返回true;
}
静态布尔方法2(布尔m){
返回m;
}
公共静态void main(字符串[]args){
CompletableFuture=CompletableFuture.supplyAsync(CompletableFutureExample::method1)。然后应用(CompletableFutureExample::method2);
}
}
  • CompletableFuture用于编写非阻塞代码,方法是在主线程以外的单独线程上运行任务,并将进度通知主线程。它可能有两种类型的结果:
    • 已完成
    • 失败
  • 本例中的主要区别在于,您可以使用method.complete(T)来完成未来的单元

  • 使用CompletableFuture,您可以附加可调用方法:
    • 然后接受(函数f)
    • 然后应用(…)
    • 然后运行(…)
  • 对于Future,当它完成时,您不会收到通知,而对于CompletableFuture,您具有这种可能性

    我希望我回答了你的问题。祝你今天愉快

  • CompletableFuture用于编写非阻塞代码,方法是在主线程以外的单独线程上运行任务,并将进度通知主线程。它可能有两种类型的结果:
    • 已完成
    • 失败
  • 本例中的主要区别在于,您可以使用method.complete(T)来完成未来的单元

  • 使用CompletableFuture,您可以附加可调用方法:
    • 然后接受(函数f)
    • 然后应用(…)
    • 然后运行(…)
  • 对于Future,当它完成时,您不会收到通知,而对于CompletableFuture,您具有这种可能性

    我希望我回答了你的问题。祝你今天愉快

  • 在第一种情况下(仅限
    Future
    ):

    • 这两个方法始终在同一个线程中执行,该线程将被阻塞,直到两个函数都完成

    • 没有异步异常处理

    • 您无法轻松地组合/修改执行链:您始终需要为每个函数组合声明一个新方法

  • 在这个特定的例子中,差异并不显著。真正的权力 当您需要组合/合并不同异步调用的结果、处理整个链的异常、管理线程等时,会出现
    CompletableFuture
    (或者更一般地说--
    CompletionStage

  • 在第一种情况下(仅限
    Future
    ):

    • 这两个方法始终在同一个线程中执行,该线程将被阻塞,直到两个函数都完成

    • 没有异步异常处理

    • 您无法轻松地组合/修改执行链:您始终需要为每个函数组合声明一个新方法

  • 在这个特定的例子中,差异并不显著。真正的权力
    当您需要组合/合并不同异步调用的结果、处理整个链的异常时,
    CompletableFuture
    (或者更一般地说--
    CompletionStage
    )会出现,管理线程等。

    这是一个奇怪的问题,我们可以举一个最简单的
    CompletableFuture
    用法的例子,询问一个只能做到这一点的构造的区别。那么
    CompletableFuture.supplyAsync(CompletableFuture示例::method1)呢?然后合并(CompletableFuture.supplyAsync(()->“任意”),(b,s)->一些其他计算)?你能用一个简单的执行器和方法来建模吗?或者,如何:
    CompletableFuture.SupplySync(CompletableFutureExample::method1)。然后应用同步(CompletableFutureExample::method2,EventQueue::invokeLater)
    ?这是一个奇怪的问题,你可以举一个最简单的可以想象的例子来说明
    可完成的未来
    用法,并询问与只能这样做的构造的区别。那么
    CompletableFuture.supplyAsync(CompletableFuture示例::method1)呢?然后合并(CompletableFuture.supplyAsync(()->“任意”),(b,s)->一些其他计算)?你能用一个简单的执行器和方法来建模吗?或者,如何:
    CompletableFuture.supplySync(CompletableFutureExample::method1)。然后应用同步(CompletableFutureExample::method2,EventQueue::invokeLater)