Callable實現多線程及線程運行狀狀態

Callable實現多線程
從最傳統來講如果要進行多線程的實現肯定要依靠的就是Runnable,但是Runnable接口有一個缺點:當線程執行完畢之後無法獲取一個返回值,所以從JDK1.5之後就提出了一個新的線程實現接口:java.util.concurrent.Callable接口,首先來觀察這個接口的定義:

可以發現Callable定義的時候可以設置一個泛型,此泛型的類型就是返回數據的類型,這樣的好處是避免向下轉型所帶來的安全隱患。

例:使用Callable實現多線程處理

class MyThread implements Callable<String> {
    @Override
    public String call() {
        for (int x = 0; x < 10; x++) {
            System.out.println("*******線程執行、x = " + x);
        }
        return "線程執行完畢";
    }
}
public class ThreadDemo {
    public static void main(String[] args) throws ExecutionException, InterruptedException {
        FutureTask<String> task = new FutureTask<>(new MyThread());
        new Thread(task).start();;
        System.out.println("線程返回數據" + task.get());
    }
}

在這裏插入圖片描述
線程運行狀狀態
對於多線程的開發而言,編寫程序的過程之中總是按照:定義線程主體類,而後通過Thread類進行線程啓動,並不意味着你調用start()方法,線程就已經開始運行了,因爲整體的線程處理有自己的一套運行的狀態。
在這裏插入圖片描述
**1、**任何一個線程的對象都應該使用Thread進行封裝,所以線程的啓動使用的是start(),但是啓動的時候實際上若干個線程都將進入到一種就緒狀態,現在並沒有執行;
**2、**進入到就緒狀態之後就需要等待進行資源調度,當某一個線程調度成功之後則進入到運行狀態(run()方法),但是所有的線程不可能一直持續執行下去,中間需要產生一些暫停的狀態,例如:某個線程執行一段時間之後就需要讓出資源;而後這個線程將進入到阻塞狀態,隨後重新迴歸到就緒狀態;
**3、**當run()方法執行完畢之後,實際上該線程的主要任務也就結束了,那麼就可以直接進入到停止狀態;

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章