java自带异步方法
超时时间
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来执行异步操作 解耦应用程序。