对 Spring boot 异步处理中有返回值的情况,进行处理

本文探讨了使用 Spring Boot 进行异步处理时如何处理有返回值的情况。传统的做法是通过 Future 接口配合死循环检查任务完成状态,但这会导致不必要的 CPU 占用。通过分析,发现在未完成时调用 Future 的 get() 方法会阻塞。为解决此问题,提出了开启新线程来避免阻塞主线程的方法,但该方法不适用于返回值与异步结果紧密相关的情景。
摘要由CSDN通过智能技术生成

在网上看到好多关于这个问题的处理,没有看到满意的结果,全部都是死循环不停的轮训,我认为这不是一个让人满意的写法。

在网上看到的方法: 

public void testAsyncAnnotationForMethodsWithReturnType()
    throws InterruptedException, ExecutionException {
	System.out.println("Invoking an asynchronous method. "
		 + Thread.currentThread().getName());
	Future<String> future = asyncAnnotationExample.asyncMethodWithReturnType();

	while (true) {
	    if (future.isDone()) {
	        System.out.println("Result from asynchronous process - " + future.get());
		            break;
	    }
	    System.out.println("Continue doing something else. ");
		Thread.sleep(1000);
	}
}

可以看到上面的方法是用了一个 Future 接口来接收异步方法返回的结果,这个接口提供了一个 isDone 方法用以判断一步方法是否已经执行完毕

然后下面用一个死循环来不停的查看异步方法是否已经执行结束,如果执行结束就去拿到返回结果并处理。

再下面是一个 sleep 语句,避免死循环过分占用 cpu 


这样处理的缺点:

   test

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值