Callable創建線程


(1)Callable接口更像是Runnable接口的增強版,相比較Runable接口,Call()方法新增捕獲和拋出異常的功能;Call()方法可以返回值<br>
(2)Future接口提供了一個實現類FutureTask實現類,FutureTaks類用來保存Call()方法的返回值,並作為Thread類的target。<br>
(3)調用FutureTask的get()方法來獲取返回值


import java.util.concurrent.Callable;
import java.util.concurrent.ExecutionException;
import java.util.concurrent.FutureTask;

/**
 * (1)創建Callable接口的實現類,並重寫call()方法,該call()方法作為線程的執行體,且有返回值
 * (2)創建了Callable接口的實現類的實例,並用FutureTask()方法包裝對象,該FutureTask()對象實現了
 *    將對象的返回值包裝的功能
 * (3)使用FutureTask對象將Thread對象的target,創建並啟動線程
 * (4)調用FutureTask對象的get()方法獲得子線程執行結束后的返回值
 * */
public class Callable_Future implements Callable<Integer> {

    @Override
    public Integer call() throws Exception {   //重寫Callable接口中的call()方法

        int i=0;
        for(;i<100;i++) {
            System.out.println(Thread.currentThread().getName()+" "+i);
        }
        return i;
    }

    public static void main(String[] args) throws InterruptedException, ExecutionException {
        //創建Callable的對象
        Callable_Future ca=new Callable_Future();
        FutureTask<Integer> ft=new FutureTask<Integer>(ca);
        for(int i=0;i<100;i++) {
            //返回值主線程的名稱和執行代號
            System.out.println(Thread.currentThread().getName()+" "+i);  
            if(i==20) {
            new Thread(ft,"Callable線程").start();
            //該方法將導致主線程被阻塞,直到call()方法結束並返回為止
             //System.out.println("子線程的返回值"+ft.get());  
            }
        }
        try{
            System.out.println("子線程的返回值"+ft.get());
        }catch (Exception e) {
            e.printStackTrace();
        }

    }
}

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM