JDK 中Future模式使用
阿新 • • 發佈:2019-02-03
tostring roc turn intel all mac pro trac 如果 ringbuf JDK 中Future模式的基本結構如下:
其中Future接口相當於訂單或契約,拿著她可以取到買的Mac Pro,也就是可以取到真實數據。RunnableFuture繼承了Future和Runnable兩個接口,其中run方法用用於構造真實數據。她有一個具體的實現FutureTask類。FutureTask會調用Callable接口完成實際的數據組裝工作。
-
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模式使用