java.lang.Runnable介面

weixin_33816946發表於2015-01-18
大家都知道使用執行緒的2種方式,一是繼承Thread類,二是實現Runnable介面。
實際上,即使你實現了Runnable介面,終於還是要構造一個Thread類的物件。
看過Thread原始碼發現,事實上這個Thread類也實現了Runnable介面,而這個Thread類的run()方法實現是
    if (target != null) {
        target.run();
    }
而這個target則是Thread類的構造器都要呼叫的init()方法所指定的Runnable介面實現類。
Thread類的幾個構造器Thread()、Thread(Runnable target)、Thread(ThreadGroup group, Runnable target)、Thread(String name)、Thread(ThreadGroup group, String name)、Thread(Runnable target, String name)、Thread(ThreadGroup group, Runnable target, String name)、Thread(ThreadGroup group, Runnable target, String name, long stackSize)都呼叫了private void init(ThreadGroup g, Runnable target, String name, long stackSize)。
所以假設你實現了Runnable介面並用這個介面實現類構造了一個Thread物件,那麼run()方法執行的將是這個target  Runnable介面實現類的run()方法,否則,假設直接繼承自Thread類,那麼這個target為null,所以你僅僅能覆蓋掉Thread類的run()方法。

相關文章