java自带异步方法

2020-10-28  本文已影响0人  __简单点__

超时时间

long timeout = 10000l;

DeferredResult> result =

new DeferredResult<>(timeout);

异步跑 其实就是调方法 开了一个线程

CompletableFuture.supplyAsync(()->{

return searchService.filterProduct(queryProductDTO);

}).thenAccept((list)->{ 

上面返回的结果会传递给下面list 进行封装

result.setResult(new ResponseData(list));

}).exceptionally(e->{  

 若异步出现异常或者超时 会进入此

result.setErrorResult(new ResponseData<Object>(500,e.getMessage()));

return null;

});

return result;

java实现异步的方法:https://www.cnblogs.com/sword-successful/p/11181714.html

一:创建线程

二:jdk1.8前通过Executors获取线程池 然后用submit方法执行异步操作获得future对象

存在问题 不算是真正的异步操作,因为获取异步结果时:用get()方法 会阻塞当前线程

三:jdk1.8:通过CompletableFuture对象的supplyAsync方法实现异步,通过thenAccept方法接收返回对象,通过Exceptionally方法处理异常

四:spring实现异步:通过配置线程池 加 Async注解执行操作,通过其返回Future对象的get方法处理异步结果

五:利用中间件:mq来执行异步操作 解耦应用程序。

上一篇下一篇

猜你喜欢

热点阅读