等待结果的异步和同步有什么区别?

What is the difference between asynchronous with waiting for result and synchronous?

最近在java学习多线程和异步编程,觉得很迷茫。

明确我的问题:下面的代码是否等效?

//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)

当要一个接一个地执行任务时,使用异步方法并没有太大的意义:你失去了同步的开销,而且还要等待处理结束。此外,如果您使用主动循环等待结束:

while (!futureTask.isDone()) {   // active wait loop
    System.out.println("FutureTask is not finished yet..."); 
} 

您给系统增加了更多负载。至少你应该使用 wait 方法将当前线程置于挂起模式,直到其他处理完成。

不过不管怎样,任务要一个接一个执行,一个接一个同步调用即可:

factorial(number));
other processings...

它使代码更干净、更易于维护,并且没有性能损失。