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

                ThinkChat2.0新版上線,更智能更精彩,支持會話、畫圖、視頻、閱讀、搜索等,送10W Token,即刻開啟你的AI之旅 廣告
                # Future Future表示一個任務的生命周期,并提供方法判斷是否已經完成或取消,以及獲取任務的結果和取消任務等; Future是J.U.C中的一個接口,它代表著一個異步執行結果。 Future可以看成線程在執行時留給調用者的一個存根,通過這個存在可以進行查看線程執行狀態\(isDone\)、取消執行\(cancel\)、阻塞等待執行完成并返回結果\(get\)、異步執行回調函數\(callback\)等操作 ``` public interface Future<V> { /** 取消,mayInterruptIfRunning-false:不允許在線程運行時中斷 **/ boolean cancel(boolean mayInterruptIfRunning); /** 是否取消**/ boolean isCancelled(); /** 是否完成 **/ boolean isDone(); /** 同步獲取結果 **/ V get() throws InterruptedException, ExecutionException; /** 同步獲取結果,響應超時 **/ V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; } ``` Future的cancel方法可以取消任務的執行,它有一布爾參數,參數為true表示立即中斷任務的執行,參數為false表示允許正在運行的任務運行完成 ### get方法 get方法的行為取決于任務的狀態\(尚未開始、正在運行、已完成\); * 如果任務已完成,那么get會立即返回或拋出一個Exception; * 如果任務沒有完成,那么get將阻塞并直到任務完成; * 如果任務拋出了異常那么get將該異常封裝為ExecutionException并重新拋出; * 如果任務被取消那么get將拋出CancellationException; 如果get拋出了ExecutionExecption那么可以通過getCause獲得被封裝的初始異常; ### Future模式核心思想 > Future模式的核心在于:去除了主函數的等待時間,并使得原本需要等待的時間段可以用于處理其他業務邏輯(根據《Java程序性能優化》) Future模式有點類似于商品訂單。在網上購物時,提交訂單后,在收貨的這段時間里無需一直在家里等候,可以先干別的事情。類推到程序設計中時,當提交請求時,期望得到答復時,如果這個答復可能很慢。傳統的時一直等待到這個答復收到時再去做別的事情,但如果利用Future設計模式就無需等待答復的到來,在等待答復的過程中可以干其他事情 ### Future模式的JDK內置實現 由于Future是非常常用的多線程設計模式,因此在JDK中內置了Future模式的實現。這些類在java.util.concurrent包里面。其中最為重要的是FutureTask類,它實現了Runnable接口,作為單獨的線程運行。在其run\(\)方法中,通過Sync內部類調用Callable接口,并維護Callable接口的返回對象。當使用FutureTask.get\(\)方法時,將返回Callable接口的返回對象 ``` import java.util.concurrent.Callable; public class RealData implements Callable<String> { protected String data; public RealData(String data) { this.data = data; } @Override public String call() throws Exception { //利用sleep方法來表示真是業務是非常緩慢的 try { Thread.sleep(1000); } catch (InterruptedException e) { e.printStackTrace(); } return data; } } import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.FutureTask; public class Application { public static void main(String[] args) throws Exception { FutureTask<String> futureTask = new FutureTask<String>(new RealData("name")); ExecutorService executor = Executors.newFixedThreadPool(1); //使用線程池 //執行FutureTask,相當于上例中的client.request("name")發送請求 executor.submit(futureTask); //這里可以用一個sleep代替對其他業務邏輯的處理 //在處理這些業務邏輯過程中,RealData也正在創建,從而充分了利用等待時間 Thread.sleep(2000); //使用真實數據 //如果call()沒有執行完成依然會等待 System.out.println("數據=" + futureTask.get()); } } ``` ### 創建Future 1. ExecutorService的submit方法返回一個future; 2. 顯示創建FutureTask; 3. 調用AbstractExecutorService的newTaskFor方法創建一個future(本質上這種方式也是創建了一個FutureTask);
                  <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>

                              哎呀哎呀视频在线观看