Java CompletableFuture VS@Async

Java CompletableFuture VS@Async,java,spring-boot,asynchronous,completable-future,Java,Spring Boot,Asynchronous,Completable Future,我不擅长英语 我使用异步方法 选择1 公共CompletableFuture getDiscountPriceAsyncInteger价格{ 返回CompletableFuture.SupplySync->{ log.infosupplyAsync; 退货价格*0.9; },线程池任务执行器; } 选择2 @异步的 公共CompletableFuture getDiscountPriceAsyncInteger价格{ 返回CompletableFuture.SupplySync->{ log.i

我不擅长英语

我使用异步方法

选择1

公共CompletableFuture getDiscountPriceAsyncInteger价格{ 返回CompletableFuture.SupplySync->{ log.infosupplyAsync; 退货价格*0.9; },线程池任务执行器; } 选择2

@异步的 公共CompletableFuture getDiscountPriceAsyncInteger价格{ 返回CompletableFuture.SupplySync->{ log.infosupplyAsync; 退货价格*0.9; },线程池任务执行器; } 我想知道使用@Async和不使用它有什么区别

我认为第一个选项1提供了足够的异步方法。
但是,像Option2一样使用它是否正确?

选项2是异步执行两次的

如果您用e@Async注释了一个方法,它将由Spring异步执行。因此,您不需要自己使用ThreadPoolExecutor

相反,你可以写:

@Async
public CompletableFuture<Integer> getDiscountPriceAsync(Integer price) {
    log.info("supplyAsync");

    return new AsyncResult<Integer>((int)(price * 0.9)); 
}

在这里阅读有关使用Spring异步的更多信息:

选项2是异步执行两次

如果您用e@Async注释了一个方法,它将由Spring异步执行。因此,您不需要自己使用ThreadPoolExecutor

相反,你可以写:

@Async
public CompletableFuture<Integer> getDiscountPriceAsync(Integer price) {
    log.info("supplyAsync");

    return new AsyncResult<Integer>((int)(price * 0.9)); 
}

请在此处阅读有关Async with Spring的更多信息:

如果我的回答有帮助,请接受。感谢您返回CompleteFuture,我必须使用AsyncResult的complete方法。->返回新的AsyncResultint价格*0.9.completable@EddyKim,您也可以使用return CompletableFuture.completedFutureintprice*0.9;我可以更新我的答案,但之前:你真的需要一个完整的未来吗?未来还不够美好吗?如果我的回答有帮助,请接受。感谢您返回CompleteFuture,我必须使用AsyncResult的complete方法。->返回新的AsyncResultint价格*0.9.completable@EddyKim,您也可以使用return CompletableFuture.completedFutureintprice*0.9;我可以更新我的答案,但之前:你真的需要一个完整的未来吗?未来还不够美好吗?相关的:相关的: