Java 多執行緒(二) Thread類與Runnable介面的關係
阿新 • • 發佈:2019-02-20
上一篇文章介紹了利用Thread類和Runnable介面建立執行緒的基本方式,可以繼承Thread類或者實現Runnable介面,並覆寫run方法,來編寫自己想要線上程裡做的事情。那麼繼承Thread類和實現Runnable這兩種方式在JDK裡是如何實現的呢,我們先來看一下Thread類的幾個基本的構造方法。
Thread() 分配一個新的Thread
Thread(String name) 分配一個新的Thread並指定Thread的名字
Thread(Runnable target) 分配一個新的Thread,並將 target
作為其執行物件
Thread(Runnable target,String name) 分配一個新的Thread,將 target
Thread類本身實現了Runnable介面,幷包含一個Runnable型別的成員變數target,並在覆寫的run方法中呼叫target.run()。當構造方法傳入Runnable引數時,會將其賦值給成員變數target,如果呼叫的構造方法不含Runnable引數,target為null,Thread類覆寫的run方法不做任何事情。JDK原始碼如下。
/** * If this thread was constructed using a separate * <code>Runnable</code> run object, then that * <code>Runnable</code> object's <code>run</code> method is called; * otherwise, this method does nothing and returns. * <p> * Subclasses of <code>Thread</code> should override this method. * * @see #start() * @see #stop() * @see #Thread(ThreadGroup, Runnable, String) */ @Override public void run() { if (target != null) { target.run(); } }
我們可以看到無論繼承Thread類還是實現Runnable介面的方式,最終執行緒執行時都是呼叫你所覆寫的run方法。出於Java無法多繼承的特性,一般都是通過實現Runnable介面的方式來完成執行緒任務。