1. 程式人生 > >java:多執行緒(實現Runnable的原理)及二種方式的區別

java:多執行緒(實現Runnable的原理)及二種方式的區別

* 1,看Thread類的建構函式,傳遞了Runnable介面的引用 
* 2,通過init()方法找到傳遞的target給成員變數的target賦值
* 3,檢視run方法,發現run方法中有判斷,如果target不為null就會呼叫Runnable介面子類物件的run方法

* 檢視原始碼的區別:
    * a.繼承Thread : 由於子類重寫了Thread類的run(), 當呼叫start()時, 直接找子類的run()方法
    * b.實現Runnable : 建構函式中傳入了Runnable的引用, 成員變數記住了它, start()呼叫run()方法時內部判斷成員變數Runnable的引用是否為空, 不為空編譯時看的是Runnable的run(),執行時執行的是子類的run()方法
    
* 繼承Thread
    * 好處是:可以直接使用Thread類中的方法,程式碼簡單
    * 弊端是:如果已經有了父類,就不能用這種方法
* 實現Runnable介面
    * 好處是:即使自己定義的執行緒類有了父類也沒關係,因為有了父類也可以實現介面,而且介面是可以多實現的
    * 弊端是:不能直接使用Thread中的方法需要先獲取到執行緒物件後,才能得到Thread的方法,程式碼複雜