1.8以前我们使用 future来实现 异步执行:
public static void main(String[] args) throws InterruptedException, ExecutionException {
ExecutorService executorService = Executors.newCachedThreadPool();
Future<String> future = executorService.submit(() -> {
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
e.printStackTrace();
}
return "callable finished";
});
//do something else
Thread.sleep(2000);
String callableResult = future.get();
System.out.println(callableResult);
executorService.shutdown();//线程池使用完 一定要关闭;
}
我们通过isDone()来判断是否执行完成或者通过 get()来获取执行结果;
1.8 以后我们使用CompletableFuture 来实现异步执行
List<CompletableFuture<Void>> futures = new ArrayList<>();
CompletableFuture<Void> future = CompletableFuture.supplyAsync(() -> testMethod(参数1,参数2))
.thenAccept(v -> acceptMtethod(v)).exceptionally(e->{
throw new BusinessException("testMethod()执行失败异常!",e);
});
//supplyAsync 有返回值
//thenAccept 表示 对testMethod()的返回值进行接受,通过acceptMtethod(v)来进行处理,无返回值!
CompletableFuture<Void> future1 = CompletableFuture.runAsync(()->testMethod(参数1,参数2)).exceptionally(e->{
throw new BusinessException("testMethod()执行失败异常!",e);
});
//runAsync 无返回值
futures.add(future);
futures.add(future1);
try {
CompletableFuture.allOf(futures.toArray(new CompletableFuture[futures.size()])).get(10, TimeUnit.SECONDS);
}catch (Exception e){
throw new SystemException(e);
}
当然还有很多方法 没讲到比如:
thenCombine 合并任务 等所有任务执行完成后 合并结果
。。。。。。