天天看點

Thread 與 Runnable 關系 | 學習筆記

開發者學堂課程【Java 進階程式設計:Thread 與 Runnable 關系】學習筆記,與課程緊密聯系,讓使用者快速學習知識。

課程位址:

https://developer.aliyun.com/learning/course/20/detail/281

Thread 與 Runnable 關系

内容簡介

一、前言

二、Thread 與 Runnable 關系

三、多線程開發

四、記憶體圖

經過一系列的分析之後可以發現,在多線程的實作過程之中已經有了兩種做法:Thread 類、Runnable 接口,如果從代碼的結構本身來講肯定使用 Runnable 是最友善的,因為其可以避免單繼承的局限,同時也可以更好的進行功能的擴充。

但是從結構上也需要來觀察 Thread 與 Runnable 的聯系,打開 Thread 類的定義:

Thread 與 Runnable 關系 | 學習筆記

發現現在 Thread 類也是 Runnable,接口的子類,那麼在之前繼承 Thread 類的時候實際上覆寫的還是 Runnable 接口的 run() 方法,于是此時來觀察一下程式的類結構。

Thread 與 Runnable 關系 | 學習筆記

Thread 與 Runnable 關系 | 學習筆記

多線程的設計之中,使用了代理設計模式的結構,使用者自定義的線程主體隻是負責項目核心功能的實作,而所有的輔助實作全部交由 Thread 類來處理。

在進行 Thread 啟動多線程的時候調用的是 start() 方法,而後找到的是 run()方法。

但通過 Thread 類的構造方法傳遞了一個 Runnable 接口對象的時候,那麼該接口對象将被 Thread 類中的 target 屬性所儲存,在 start() 方法執行的時候會調用Thread類中的 run() 方法,而這個 run() 方法去調用 Runnable 接口子類被覆寫過的 run() 方法。

多線程開發的本質實質上是在于多個線程可以進行同一資源的搶占,那麼 Thread 主要描述的是線程,而資源的描述是通過 Runnable 完成的。

Thread 與 Runnable 關系 | 學習筆記

範例:利用賣票程式來實作多個線程的資源并發通路

Thread 與 Runnable 關系 | 學習筆記

通過記憶體分析圖來分析本程式的執行結構。

Thread 與 Runnable 關系 | 學習筆記