<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國際加速解決方案。 廣告
                [TOC] # Runnable、Callable、Future 和 FutureTask ## 定義 ```java public interface Runnable { public abstract void run(); } public interface Callable<V> { V call() throws Exception; } public interface Future<V> { boolean cancel(boolean mayInterruptIfRunning); boolean isCancelled(); boolean isDone(); V get() throws InterruptedException, ExecutionException; V get(long timeout, TimeUnit unit) throws InterruptedException, ExecutionException, TimeoutException; } public class FutureTask<V> implements RunnableFuture<V> { public FutureTask(Callable<V> callable) { ... } public FutureTask(Runnable runnable, V result) { ... } ... } ``` 可以看到: 1、Callable 是一個泛型接口,被線程執行后,可以有返回值;而 Runnable 沒有返回值 2、Future 是一個接口,定義了對具體的 Runnable 或 Callable 任務進行的一系列操作,包括:取消、查詢是否被取消、查詢是否完成、獲取結果 3、FutureTask 實現了 RunnableFuture,而 RunnableFuture 又繼承自 Runnable 和 Future。所以 FutureTask 既可以作為 Runnable 被線程執行,又可以作為 Future 得到 Callable 的返回值 ## 執行任務 執行線程任務有兩種方式,分別為通過 ExecutorService 和 Thread: ```java Callable<Integer> callable = new Callable<Integer>() { @Override public Integer call() throws Exception { // do something return 0; } }; ExecutorService executorService = Executors.newSingleThreadExecutor(); Future<Integer> future = executorService.submit(callable); ``` ```java new Thread(new Runnable() { @Override public void run() { // do something } }).start(); ``` 其中 * Executor 可以接收 Callable 形式或 Runnable 形式,傳入 Runnable 最終也會轉換為 Callable; * Thread 方式只能接收 Runnable 形式。 ## Future 我們可以通過實現 Future 接口的對象,來對執行任務的 Callable 或 Runnable 進行一系列操作。示例如下: ```java ExecutorService executorService = Executors.newSingleThreadExecutor(); Future<Integer> future = executorService.submit(callable); try { Log.i(TAG, "result is " + future.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } ``` ## FutureTask FutureTask 彌補了 Thread 只能接收 Runnable 參數,并且不能獲取返回值的問題。 1、FutureTask 作為 Runnable ```java Callable<Integer> callable = new Callable<Integer>() { @Override public Integer call() throws Exception { // do something return 0; } }; FutureTask<Integer> futureTask = new FutureTask<>(callable); new Thread(futureTask).start(); ``` 2、FutureTask 作為 Future,獲取返回值 ```java Callable<Integer> callable = new Callable<Integer>() { @Override public Integer call() throws Exception { // do something return 0; } }; FutureTask<Integer> futureTask = new FutureTask<>(callable); new Thread(futureTask).start(); // FutureTask 作為 Future,獲取返回值 try { Log.i(TAG, "test: " + futureTask.get()); } catch (InterruptedException e) { e.printStackTrace(); } catch (ExecutionException e) { e.printStackTrace(); } ```
                  <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>

                              哎呀哎呀视频在线观看