建立執行緒有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...