本文介绍如何使用Future的异步处理。
使用JdkFutureAdapters包装
final List listenableFutures = futures.stream().map(JdkFutureAdapters::listenInPoolThread).collect(Collectors.toList()); Futures.successfulAsList(listenableFutures,new FutureCallback(){ @Override public void onSuccess(@Nullable Object o) { } @Override public void onFailure(Throwable throwable) { } } );}
JAVA8的whenComplete
CompletableFuture.supplyAsync(() -> modelConvertHandle(mes), MODEL_REBUILD_EXE) .whenComplete((r, e) -> { if (e != null) { LOG.error(“manual sync is failed,Cost Time:{} ms”, System.currentTimeMillis() – current, e); } else { LOG.info(“manual sync is success,response is:{},Cost Time:{} ms”, r, System.currentTimeMillis() – current); } manualSyncFinish(); });
在whenCompleteAsync除非特别指定,都是默认使用的forkJoin线程池。