1. 程式人生 > >JDK 中Future模式使用

JDK 中Future模式使用

tostring roc turn intel all mac pro trac 如果 ringbuf

  • JDK 中Future模式的基本結構如下:
  • 技術分享圖片

    其中Future接口相當於訂單或契約,拿著她可以取到買的Mac Pro,也就是可以取到真實數據。RunnableFuture繼承了Future和Runnable兩個接口,其中run方法用用於構造真實數據。她有一個具體的實現FutureTask類。FutureTask會調用Callable接口完成實際的數據組裝工作。

    1. JDK內置的Future基本使用

      /**
      * Created with IntelliJ IDEA.
      * User: zyg
      * Date: 2019/2/2
      * Time: 下午2:41
      * Description:使用callable實例構造一個FutureTask實例,並將其提交給線程池
      */
      public class RealData implements Callable<String> {
      private String para;
      
      public RealData(String para) {
          this.para = para;
      }
      
      //實現Callable接口,其call方法會構造真實數據並返回
      public String call() throws Exception {
          StringBuffer sb = new StringBuffer();
          for (int i = 0; i < 10; i++) {
              Thread.sleep(200);
              sb.append(para);
          }
          return sb.toString();
      }
      
      public static void main(String[] args) {
          //使用Callable接口實例構造FutureTask實例
          FutureTask future = new FutureTask(new RealData("大冪冪"));
          //定義線程池
          ExecutorService exec = Executors.newFixedThreadPool(1);
          //使用現場異步處理真實數據
          exec.submit(future);
          System.out.println("請求完畢,可以接著做其他事情...");
      
          try {
              Thread.sleep(2000);
          } catch (InterruptedException e) {
              e.printStackTrace();
          }
      
          //業務處理完畢,現在假設需要真實數據,使用Callbale接口的get方法,獲取真實數據
          //如果真實數據還沒準備好則阻塞,這個過程在模擬Future模式的時候已實現
          try {
              System.out.println("數據{}," + future.get());
          } catch (InterruptedException e) {
              e.printStackTrace();
          } catch (ExecutionException e) {
              e.printStackTrace();
          }
      
          exec.shutdown();
      }
      }

    JDK 中Future模式使用