Thread原始碼解析 其實建立執行緒的方式就一種!

2021-10-10 22:07:19 字數 1748 閱讀 9858

在以上三種方式中,工作中最常用的是方式二,也就是實現runnable介面。儘管我們知道了方式二是最常用的,但是喝水不忘挖井人。那麼誰是挖井人呢?我們先來看看runnable介面的原始碼。

什麼runnable裡就乙個空方法?不用幹活就有錢轉?這或許是我們嚮往的生活吧。那麼究竟是誰給runnable介面打工了呢。這個時候我們就應該去看看方法二的執行緒是如何建立的,方式二是用了thread類中帶引數的構造方法,這個構造方法的形式引數是乙個runnable型別的例項物件。好了,破案成功,所有的原因都在thread類中!接下來我們進入thread類中一**竟!

看完這個圖相信大家有點想法了,接下來就通過上面的**來看看方式一跟方式二建立執行緒的過程。

方式一:

實際上該方式就是呼叫start的事,前面的我只想講講整個程式執行的過程,有助於等下區分這幾種方式的不同 注意:方式一採用繼承的方式,所以父類thread中的run方法是會被子類run()方法覆蓋的,所以沒走父類的run,而走了子類的run。 另外方式一的前三步實際上是沒多大意義的,因為子類重寫run方法後,父類的run方法是不會走的,也就是說前三步的target是在呼叫了父類的run方法後才有實際意義的,方拾二就有體現。

方式二:

好像是有那麼一點繞,呼叫來呼叫去到底是為什麼?最後跑了一大圈,還是走的threadcreatedemo2中的run方法。

總之,繼承thread類重寫的就是thread類的run方法,實現runnable介面重寫的就是runnable介面的run方法。方式三:

由於第三中方式相對比較繞,所以相關文字寫在下面,總體還是第二種方式。 首先,是建立了demo3物件,由於實現了callable介面,因此可以說demo3是callable型別的。 futuretask類的構造方法需要傳入乙個callable型別的物件,所以的demo3符合。細節拉滿!從原始碼中可以看出futuretask繼承了runnablefuture介面,而runnablefuture介面從原始碼中也可以看出它繼承了runnable介面。那是不是可以說futuretask是runnable型別了。

Thread類原始碼分析

thread狀態 thread內部有個state列舉,標示著執行緒的狀態。public enum state構造方法 建構函式及其幾個相關的成員變數 帶目標run物件.private runnable target 執行緒組 private threadgroup group 此執行緒的類載入器 p...

Thread原始碼問題練習

public static void main string args start a 輸出的是 thread匿名子類的run方法 b thread中呼叫runnable介面覆寫的run方法的方法,被override了,使得thread的start方法轉而呼叫thread匿名內部類 子類 中覆寫的r...

Fabric 原始碼解析 原始碼目錄解析

這裡對重要的一些目錄進行說明 bccsp 與密碼學 加密 簽名 證書等等 相關的加密服務 將fabric中用到的密碼學相關的函式抽象成了一組介面,便於拓展。bddtests 一種新型的軟體開發模式 行為驅動開 需求 開發 common 一些公共庫 錯誤處理 日誌處理 賬本儲存 策略以及各種工具等等 ...