<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                ??一站式輕松地調用各大LLM模型接口,支持GPT4、智譜、豆包、星火、月之暗面及文生圖、文生視頻 廣告
                該功能由[`Guava`](https://guava.dev/)封裝而來 > 在并發編程中,我們經常用到非阻塞的模型,在之前的多線程的三種實現中,不管是繼承`Thread`類還是實現`Runnable`接口,都無法獲取到之前的執行結果。`Java`中,也提供了使用`Callable`和`Future`來實現獲取任務結果的操作。`Callable`用來執行任務,產生結果,而`Future`用來獲得結果。 > Guava `ListenableFuture`是可以監聽的`Future`,它是對java原生Future的擴展增強。當任務完成時可以得到計算結果。如果希望計算完成時馬上就拿到結果展示給用戶或者做另外的計算,就必須使用另一個線程不斷的查詢計算狀態。這樣做會使得代碼復雜,且效率低下。使用ListenableFuture,Guava會幫助檢測Future是否完成了,如果完成就自動調用回調函數,這樣可以減少并發程序的復雜度。 [TOC] # 測試示例 ``` @Test public void executor() throws InterruptedException, ExecutionException { // 執行任務,不監聽結果 ExecutorHelper.submit(new MyRunnable("1")); // 執行任務,監聽結果1 ExecutorHelper.submit(new Callable<Result>() { @Override public Result call() throws Exception { // 這里進行耗時異步運算 return R.succ("2"); } }, new MyFutureCallback()); // 執行任務,監聽結果2 ExecutorHelper.submit(new MyTask("3")); // 執行任務 ListenableFuture<String> future1 = ExecutorHelper.submit(() -> "4"); // 處理結果 ListenableFuture<String> future2 = Futures.transform(future1, new Function<String, String>() { @Override public String apply(String input) { return input + " transform"; } }, MoreExecutors.directExecutor()); // 監聽結果 Futures.addCallback(future2, new FutureCallback<String>() { @Override public void onSuccess(@Nullable String result) { log.info(result); } @Override public void onFailure(Throwable t) { log.info(t.getMessage()); } }, MoreExecutors.directExecutor()); } ``` 輔助類 ``` public static class MyRunnable implements Runnable { public String result; public MyRunnable(String result) { this.result = result; } @Override public void run() { // 這里進行耗時異步運算 log.info(result); } } public static class MyFutureCallback implements FutureCallback<Result> { @Override public void onSuccess(@Nullable Result result) { log.info(result.getMsg()); } @Override public void onFailure(Throwable t) { log.info(t.getMessage()); } } @AllArgsConstructor public static class MyTask extends DefaultTask<Result> { public String keyword; @Override public Result call() throws Exception { // 這里進行耗時異步運算 return R.succ(keyword); } @Override public void onSuccess(Result result) { log.info(result.getMsg()); } @Override public void onFailure(Throwable t) { log.info(t.getMessage()); } } ``` # 驗證結果 ``` [FastBoot][ INFO][08-22 16:24:49]-->[pool-2-thread-1: 2411][run(ExecutorHelperTest.java:64)] | - 1 [FastBoot][ INFO][08-22 16:24:49]-->[main: 2421][onSuccess(ExecutorHelperTest.java:72)] | - 2 [FastBoot][ INFO][08-22 16:24:49]-->[pool-2-thread-1: 2426][onSuccess(ExecutorHelperTest.java:94)] | - 3 [FastBoot][ INFO][08-22 16:24:49]-->[main: 2432][onSuccess(ExecutorHelperTest.java:43)] | - 4 transform ```
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看