建立執行緒的方式三:實現Callable介面

qq_42698593發表於2021-01-04

建立執行緒的方式三:實現Callable介面

實現Callable介面

jdk 5.0新增

Callable介面的方式優勢:

為何實現Callable介面的方式建立多執行緒比實現Runnable介面建立多執行緒方式強大?
1.call( )可以有返回值的.
2.call( )可以丟擲異常,被外面的操作捕獲,獲取異常的資訊
3.Callable是支援泛型的.(本例中尚未提及)

程式碼

//1.建立一個實現Callable的實現類
class  NumThread implements Callable{
    //2.實現(重寫)call方法,將此執行緒需要執行的操作宣告在call()中.   注意:call()是可以有返回值,這一點跟run()不同
    @Override
    public Object call() throws Exception {
        int sum=0;
        for (int i = 0; i <=100 ; i++) {
            if (i%2==0){
                System.out.println(i);
                sum+=i;
            }
        }
        return  sum;

    }
}
public class ThreadNew {
    public static void main(String[] args) {
        //3.建立Callable介面實現類的物件
        NumThread numThread = new NumThread();
        //4.將此Callable介面實現類的物件作為傳遞到FutureTask構造器中,建立FutureTask的物件
        FutureTask futureTask = new FutureTask(numThread);
        //5.將Future Task的物件作為引數傳遞到Thread類的構造器中,建立Thread物件,並呼叫start()
        new Thread(futureTask).start();//啟動執行緒
        try {
            //6.獲取Callable中call() 的返回值[如果不需要返回值,那麼第6步可以省略]
            //get()返回值即為FutureTask構造引數Callable實現類重新的call()的返回值
            Object sum = futureTask.get();
            System.out.println("總和為:"+sum);

        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }

}

相關文章