1. 程式人生 > >多執行緒中Future與FutureTask的區別和聯絡

多執行緒中Future與FutureTask的區別和聯絡

4.2 使用Callable+FutureTask獲取執行結果
    package com.zejian.Executor;  
    import java.util.concurrent.ExecutorService;  
    import java.util.concurrent.Executors;  
    import java.util.concurrent.Future;  
    import java.util.concurrent.FutureTask;  
    /** 
     * @author zejian 
     * @time 2016年3月15日 下午2:05:43 
     * @decrition callable執行測試類 
     */  
    public class CallableTest {  
          
        public static void main(String[] args) {  
    //      //建立執行緒池  
    //      ExecutorService es = Executors.newSingleThreadExecutor();  
    //      //建立Callable物件任務  
    //      CallableDemo calTask=new CallableDemo();  
    //      //提交任務並獲取執行結果  
    //      Future<Integer> future =es.submit(calTask);  
    //      //關閉執行緒池  
    //      es.shutdown();  
              
            //建立執行緒池  
            ExecutorService es = Executors.newSingleThreadExecutor();  
            //建立Callable物件任務  
            CallableDemo calTask=new CallableDemo();  
            //建立FutureTask  
            FutureTask<Integer> futureTask=new FutureTask<>(calTask);  
            //執行任務  
            es.submit(futureTask);  
            //關閉執行緒池  
            es.shutdown();  
            try {  
                Thread.sleep(2000);  
            System.out.println("主執行緒在執行其他任務");  
              
            if(futureTask.get()!=null){  
                //輸出獲取到的結果  
                System.out.println("futureTask.get()-->"+futureTask.get());  
            }else{  
                //輸出獲取到的結果  
                System.out.println("futureTask.get()未獲取到結果");  
            }  
              
            } catch (Exception e) {  
                e.printStackTrace();  
            }  
            System.out.println("主執行緒在執行完成");  
        }  
    } 
執行結果:
Callable子執行緒開始計算啦!
主執行緒在執行其他任務
Callable子執行緒計算結束!
futureTask.get()-->12497500
主執行緒在執行完成