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