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

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                <!-- The Rest of the Chapter --> ## 本章其余部分 這是我們將在本章的其余部分介紹的內容。請記住,本章的重點是使用最新的高級Java并發結構。相比于舊的替代品,使用這些會使你的生活更加輕松。但是,你仍會在遺留代碼中遇到一些低級工具。有時,你可能會被迫自己使用其中的一些。附錄:[并發底層原理](./Appendix-Low-Level-Concurrency.md)包含一些更原始的Java并發元素的介紹。 - Parallel Streams(并行流) 到目前為止,我已經強調了Java 8 Streams提供的改進語法。現在該語法(作為一個粉絲,我希望)會使你感到舒適,你可以獲得額外的好處:你可以通過簡單地將parallel()添加到表達式來并行化流。這是一種簡單,強大,坦率地說是利用多處理器的驚人方式 添加parallel()來提高速度似乎是微不足道的,但是,唉,它就像你剛剛在[殘酷的真相](#The-Brutal-Truth)中學到的那樣簡單。我將演示并解釋一些盲目添加parallel()到Stream表達式的缺陷。 - 創建和運行任務 任務是一段可以獨立運行的代碼。為了解釋創建和運行任務的一些基礎知識,本節介紹了一種比并行流或CompletableFutures更簡單的機制:Executor。執行者管理一些低級Thread對象(Java中最原始的并發形式)。你創建一個任務,然后將其交給Executor去運行。 有多種類型的Executor用于不同的目的。在這里,我們將展示規范形式,代表創建和運行任務的最簡單和最佳方法。 - 終止長時間運行的任務 任務獨立運行,因此需要一種機制來關閉它們。典型的方法使用了一個標志,這引入了共享內存的問題,我們將使用Java的“Atomic”庫來回避它。 - Completable Futures 當你將衣服帶到干洗店時,他們會給你一張收據。你繼續完成其他任務,當你的衣服洗干凈時你可以把它取走。收據是你與干洗店在后臺執行的任務的連接。這是Java 5中引入的Future的方法。 Future比以前的方法更方便,但你仍然必須出現并用收據取出干洗,如果任務沒有完成你還需要等待。對于一系列操作,Futures并沒有真正幫助那么多。 Java 8 CompletableFuture是一個更好的解決方案:它允許你將操作鏈接在一起,因此你不必將代碼寫入接口排序操作。有了CompletableFuture完美的結合,就可以更容易地做出“采購原料,組合成分,烹飪食物,提供食物,收拾餐具,儲存餐具”等一系列鏈式操作。 - 死鎖 某些任務必須去**等待 - 阻塞**來獲得其他任務的結果。被阻止的任務有可能等待另一個被阻止的任務,另一個被阻止的任務也在等待其他任務,等等。如果被阻止的任務鏈循環到第一個,沒有人可以取得任何進展,你就會陷入死鎖。 如果在運行程序時沒有立即出現死鎖,則會出現最大的問題。你的系統可能容易出現死鎖,并且只會在某些條件下死鎖。程序可能在某個平臺上(例如在你的開發機器)運行正常,但是當你將其部署到不同的硬件時會開始死鎖。 死鎖通常源于細微的編程錯誤;一系列無辜的決定,最終意外地創建了一個依賴循環。本節包含一個經典示例,演示了死鎖的特性。 * 努力,復雜,成本 我們將通過模擬創建披薩的過程完成本章,首先使用并行流實現它,然后是CompletableFutures。這不僅僅是兩種方法的比較,更重要的是探索你應該投入多少工作來使你的程序變得更快。
                  <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>

                              哎呀哎呀视频在线观看