(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(); } } }