【Java基礎】:執行緒的三種建立方式對比分析

連江偉發表於2016-08-30

        上篇部落格介紹了建立執行緒的三種方式,那麼這三種方式有什麼不同的地方和相同的地方呢?今天我們就一起簡單聊聊這三種方式的差別在哪裡。

        首先,通過繼承Thread類或者實現Runnable、Callable介面都可以實現多執行緒,不過實現Runnable介面與實現Callable介面的方式基本相同,只是Callable介面裡定義的方法有返回值,可以宣告丟擲異常而已。因此可以將實現Runnable介面和實現Callable介面歸為一種方式。這種方式與繼承Thread方式之間的主要差別如下:

        1採用實現Runnable和Callable介面得方式建立多執行緒的優缺點

         執行緒類只是實現了Runnable介面或者Callable介面,還可以繼承其他類。

         在這種方式下,多個執行緒可以共享同一個target物件,所以非常適合多個相同執行緒來處理同一份資源的應用場景,從而可以將CPU、程式碼和資料分開,形成清晰的模型,較好地體現了物件導向的思想。

         不好的地方是:程式設計稍顯複雜,如果需要訪問當前執行緒,則必須使用Thread.currentThread()方法。

        2採用繼承Thread類的方式建立多執行緒的優缺點:

         優勢是,編寫簡單,如果需要訪問當前執行緒,則無須使用Thread.currentThread()方法,直接使用this即可獲得當前執行緒。

         劣勢是,因為執行緒類已經繼承了Thread類,所以不能再繼承其他父類了,無法進行功能擴充套件和增強。

        綜合考慮,一般進行多執行緒程式開發多使用實現Runnable和Callable介面的方式。

相關文章