本文共 1365 字,大约阅读时间需要 4 分钟。
CompletableFuture的acceptEitherAsync:哪个线程跑的最快用那个
acceptEitherAsync:假设两个线程A和B,不确定A和B哪个最快执行完毕返回, 但是需要使用最快执行完毕的线程返回的结果。那么就可以使用代码:
private void test() { System.out.println("开始..."); CompletableFuture.supplyAsync(new Supplier() { @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 () { @Override public String get() { try { TimeUnit.SECONDS.sleep(5); } catch (InterruptedException e) { e.printStackTrace(); } System.out.println("返回 B"); return "B"; } }), new Consumer () { @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: 返回 A07-02 14:28:03.772 30166-30193/zhangphil.test I/System.out: 最快返回的:A07-02 14:28:07.771 30166-30194/zhangphil.test I/System.out: 返回 B线程A仅需1秒即返回执行结果,而线程B需要长达5秒执行完毕才返回结果,那么就采用线程A执行的结果。
转载地址:http://icxkm.baihongyu.com/