Callable原始碼分析

2021-10-24 08:40:53 字數 1750 閱讀 7505

建立執行緒有3種方法:

1、繼承thread介面,重寫run方法,呼叫start方法;

public

class

mythread1

extends

thread

public

static

void

main

(string[

] args)

}

2、實現runnable介面,重寫run方法;執行執行緒放入runnable介面實現類,呼叫start方法;

class

mythread2

implements

runnable

public

static

void

main

(string[

] args)

}

3、實現callable介面,重寫call方法;需要借助futuretask 類將thread和callable進行關聯起來;

class

mythread

implements

callable

public

static

void

main

(string[

] args)

throws executionexception, interruptedexception

}

現在我們來聊聊callable,它好像比前2種建立執行緒的方法更加複雜一些,需要用到futuretask類;它的優點也很明顯,直接將結論放在這裡;

callable的優點

可以有返回值

可以丟擲異常

方法不同 run()/call()

原始碼分析

原始碼中可以看到thread類在 jdk1.0就有了,而callable 在 jdk1.5 才有的,那肯定是作為建立執行緒的乙個拓展類,thread的構造方法並沒有和callable直接關聯,它只認識runnable,如果將runnable 和 callable關聯起來的,那事情就好辦多了;

runnable的子類中,有乙個 futuretask的實現類,futuretask有乙個我們想看到的構造方法(它的第二個構造方法還可以跟runnable關聯,並且有返回值),這樣futuretask就跟callable產生聯絡了;

futuretask的類圖也許會更清晰一些:

設計模式分析

callable 建立執行緒的方式 可以有返回值,可以丟擲異常,重寫的方法是call() 而不是run();

重要的還是要理解callable 的思想,建議上面的**和原始碼自己敲一敲找一找,理解才是最重要的。

Callable原始碼分析

create by jh on 2018 4 9 乙個任務返回的結果可能丟擲異常,繼承者定義了乙個單例的沒有引數的方法被稱為call callable介面與runnable介面相似,這兩個都是為那些可能被其他執行緒的執行的例項的類設計的 runnable不會返回乙個結果,也不會跑出checked異常...

原始碼 callable介面的底層實現

在使用執行緒池的時候,我們需要使用到callable介面,那我們來看一下calllable的底層是怎麼實現,並且有返回值的。首先我們看一下呼叫。threadpoolexcutor並沒有實現 submit 方法,那麼肯定是它的父類實現的。如願以償在abstractexecutorservice中找到了...

spring原始碼分析 spring原始碼分析

1.spring 執行原理 spring 啟動時讀取應用程式提供的 bean 配置資訊,並在 spring 容器中生成乙份相應的 bean 配置登錄檔,然後根據這張登錄檔例項化 bean,裝配好 bean 之間的依賴關係,為上 層應用提供準備就緒的執行環境。二 spring 原始碼分析 1.1spr...