1. 程式人生 > >Java 多執行緒(二) Thread類與Runnable介面的關係

Java 多執行緒(二) Thread類與Runnable介面的關係

上一篇文章介紹了利用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的名字


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介面的方式來完成執行緒任務。