<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>

                合規國際互聯網加速 OSASE為企業客戶提供高速穩定SD-WAN國際加速解決方案。 廣告
                ## CompletableFuture類 作為介紹,這里是使用CompletableFutures在QuittingTasks.java中: ```java // concurrent/QuittingCompletable.java import java.util.*; import java.util.stream.*; import java.util.concurrent.*; import onjava.Nap; public class QuittingCompletable { public static void main(String[] args) { List<QuittableTask> tasks = IntStream.range(1, QuittingTasks.COUNT) .mapToObj(QuittableTask::new) .collect(Collectors.toList()); List<CompletableFuture<Void>> cfutures = tasks.stream() .map(CompletableFuture::runAsync) .collect(Collectors.toList()); new Nap(1); tasks.forEach(QuittableTask::quit); cfutures.forEach(CompletableFuture::join); } } ``` 輸出結果: ``` 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 2526 27 28 29 30 31 32 33 34 6 35 4 38 39 40 41 42 43 4445 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 6263 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 8081 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 9899 100 101 102 103 104 105 106 107 108 109 110 111 1121 113 114 116 117 118 119 120 121 122 123 124 125 126127 128 129 130 131 132 133 134 135 136 137 138 139 140141 142 143 144 145 146 147 148 149 5 115 37 36 2 3 ``` 任務是一個 `List<QuittableTask>`,就像在 `QuittingTasks.java` 中一樣,但是在這個例子中,沒有 `peek()` 將每個 `QuittableTask` 提交給 `ExecutorService`。相反,在創建 `cfutures` 期間,每個任務都交給 `CompletableFuture::runAsync`。這執行 `VerifyTask.run()` 并返回 `CompletableFuture<Void>` 。因為 `run()` 不返回任何內容,所以在這種情況下我只使用 `CompletableFuture` 調用 `join()` 來等待它完成。 在本例中需要注意的重要一點是,運行任務不需要使用 `ExecutorService`。而是直接交給 `CompletableFuture` 管理 (不過你可以向它提供自己定義的 `ExectorService`)。您也不需要調用 `shutdown()`;事實上,除非你像我在這里所做的那樣顯式地調用 `join()`,否則程序將盡快退出,而不必等待任務完成。 這個例子只是一個起點。你很快就會看到 `ComplempleFuture` 能夠做得更多。
                  <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>

                              哎呀哎呀视频在线观看