gpt4 book ai didi

java - 异步与等待结果和同步之间有什么区别?

转载 作者:行者123 更新时间:2023-12-03 13:16:32 24 4
gpt4 key购买 nike

最近,我正在学习Java中的多线程和异步编程,但发现这很令人困惑。
要明确我的问题:下面的代码是否等效?

  • 如果否,为什么?我认为,在第一个代码段中,while循环将使原始线程处于繁忙状态(意味着阻塞?)。
  • 如果是,如何正确使用异步?
  • //asynchronous programing

    ExecutorService threadpool = Executors.newCachedThreadPool();
    Future<Long> futureTask = threadpool.submit(() -> factorial(number));

    while (!futureTask.isDone()) {
    System.out.println("FutureTask is not finished yet...");
    }
    long result = futureTask.get();

    threadpool.shutdown();
    //synchronous
    long result = factorial(number)

    最佳答案

    当一个接一个地执行任务时,使用异步方法实际上没有任何意义:您失去了同步的开销,但仍然必须等待处理结束。此外,如果使用 Activity 循环等待结束:

    while (!futureTask.isDone()) {   // active wait loop
    System.out.println("FutureTask is not finished yet...");
    }
    您会给系统增加更多的负载。至少您应该使用 wait方法将当前线程置于挂起模式,直到其他处理完成。
    但是无论如何,如果要一个接一个地执行任务,只需一个接一个地同步调用它们即可:
    factorial(number));
    other processings...
    这样可以使代码的维护更简洁,更简单,而不会造成性能损失。

    关于java - 异步与等待结果和同步之间有什么区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/66396992/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com