java_10:線程建立的方式二

除了繼承Thread類和實現Runnable接口兩種建立線程的方式,JDK5.0還新增類兩種線程建立方式:java

新增方式一:實現Callable接口

好處:
(1)與使用Runnable相比,Callable功能更強大些
(2)相比run()方法,能夠有返回值
(3)方法能夠拋出異常
(4)支持泛型的返回值
(5)須要藉助FutureTask類,好比獲取返回結果
Future接口:
1)能夠對具體的Runnable\Callable任務的執行結果進行取消、查詢是否完成、獲取結果等
2)FutureTask是Future接口惟一的實現類
3)FutureTask同時實現了Runnable,Future接口。
【它既能夠做爲Runnable被線程執行,又能夠做爲Future獲得Callable的返回值】ide

建立的過程和實例

java_10:線程建立的方式二

//1.建立實現類
class NumThread implements Callable {
//2.重寫call()方法
    @Override
    public Object call() throws Exception {
        int sum=0;
        for(int i=1;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.將實現類的對象做爲參數傳遞到FutureTask構造器,建立 FutureTask對象
        FutureTask futureTask = new FutureTask(numThread);
    //5.將FutureTask的對象做爲參數傳遞到Thread類的構造器中,並調用start()
        new Thread(futureTask).start();
//6.須要的話,能夠藉助FutureTask的對象進行一系列操做
        try {
            //get()返回值爲FutureTask構造器參數Callable實現類重寫的call()的返回值
            Object sum = futureTask.get();
            System.out.println("總和:"+sum);
        } catch (InterruptedException e) {
            e.printStackTrace();
        } catch (ExecutionException e) {
            e.printStackTrace();
        }
    }
}

java_10:線程建立的方式二

新增方式二:使用線程池

好處:工具

1)提升響應速度--減小建立新線程的時間
2)下降資源消耗--重複利用線程池中的線程,不須要每次都建立
3)便於線程管理:
corePoolSize:核心池的大小
maximumPoolSize:最大線程數
keepAliveTime:線程沒有任務時最多保持多長時間會終止
線程池相關API--ExecutorService和Executors
ExecutorService:真正的線程池接口,常見子類ThreadPoolExecutor
Executors:工具類、線程池的工廠類。用於建立並返回不一樣類型的線程池
java_10:線程建立的方式二線程

java_10:線程建立的方式二

相關文章
相關標籤/搜索