JDK 中Future模式使用

  1. JDK 中Future模式的基本結構如下:

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();
    }
    }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章