CompletableFuture CompletableFuture.supplyAsync 异常处理
Posted 高因咖啡
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了CompletableFuture CompletableFuture.supplyAsync 异常处理相关的知识,希望对你有一定的参考价值。
CompletableFuture 异常处理completeExceptionally可以把异常抛到主线程
/** * User: laizhenwei * Date: 2018-01-30 Time: 22:26 * Description: */ @RunWith(SpringRunner.class) //@SpringBootTest public class CompletableFutureTests { @Test public void testMethod() { String[] orders = {"1", "2", "3", "4", "5", "6"}; List<CompletableFuture<Boolean>> futures = new ArrayList<>(); Arrays.stream(orders).forEach(id -> { try{ futures.add(submitAsync(id)); }catch (Exception ex){ System.out.println(ex); } }); futures.stream().forEach(f-> { try { System.out.println(f.get()); } catch (Exception e) { e.printStackTrace(); } }); } private static Boolean submit(String order) { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } throw new RuntimeException("抛一个异常" + order); } private static CompletableFuture<Boolean> submitAsync(String order) { CompletableFuture<Boolean> future = new CompletableFuture<>(); new Thread(() -> { try { Boolean result = submit(order); future.complete(result); } catch (Exception ex) { future.completeExceptionally(ex); } }).start(); return future; } }
使用 CompletableFuture.supplyAsync 简化代码 加入线程池,exceptionally处理异常
/** * User: laizhenwei * Date: 2018-01-30 Time: 22:26 * Description: */ @RunWith(SpringRunner.class) //@SpringBootTest public class CompletableFutureTests { ExecutorService executor = Executors.newFixedThreadPool(3); @Test public void testMethod() { String[] orders = {"1", "2", "3", "4", "5", "6"}; Arrays.stream(orders).forEach(id -> CompletableFuture.supplyAsync(() -> submit(id), executor).exceptionally(e -> { System.out.println(e); return false; })); executor.shutdown(); while (!executor.isTerminated()) { try { TimeUnit.MILLISECONDS.sleep(500); } catch (InterruptedException e) { e.printStackTrace(); } } } private static Boolean submit(String order) { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } throw new RuntimeException("抛一个异常" + order); } }
以上是关于CompletableFuture CompletableFuture.supplyAsync 异常处理的主要内容,如果未能解决你的问题,请参考以下文章
CompletableFuture CompletableFuture.supplyAsync 异常处理
返回 CompletableFuture<Void> 还是 CompletableFuture<?>?
gulp4.0 存在的错误信息 The following tasks did not complete: default,Did you forget to signal async complet
CompletableFuture进阶篇-外卖商家端API的异步化