CompletableFuture的acceptEitherAsync:哪个线程跑的最快用那个
acceptEitherAsync:假设两个线程A和B,不确定A和B哪个最快执行完毕返回, 但是需要使用最快执行完毕的线程返回的结果。那么就可以使用代码:
private void test() { System.out.println("开始..."); CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String get() { try { TimeUnit.SECONDS.sleep(1); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("返回 A"); return "A"; } }).acceptEitherAsync(CompletableFuture.supplyAsync(new Supplier<String>() { @Override public String get() { try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("返回 B"); return "B"; } }), new Consumer<String>() { @Override public void accept(String s) { System.out.println("最快返回的:" + s); } }); }
代码运行输出:
07-02 14:28:02.766 30166-30166/zhangphil.test I/System.out: 开始...
07-02 14:28:03.770 30166-30193/zhangphil.test I/System.out: 返回 A
07-02 14:28:03.772 30166-30193/zhangphil.test I/System.out: 最快返回的:A
07-02 14:28:07.771 30166-30194/zhangphil.test I/System.out: 返回 B
线程A仅需1秒即返回执行结果,而线程B需要长达5秒执行完毕才返回结果,那么就采用线程A执行的结果。