在閱讀java.lang.Thread
類的源代碼時。奇怪的是我想看看一個run()
方法(用戶定義的run())是如何由Thread類調用的。當我在執行Runnable
界面如下當我們擴展Thread類時,如何調用run()方法
Thread waiterThread = new Thread(waiter, "waiterThread");
waiterThread.start();
在從Thread
類的構造方法init()
上面的代碼被調用,並從那裏他們本身初始化Runnable
實例作爲this.target = target
。
start()
從方法它們被調用native
方法start0()
而有可能在轉呼叫的Thread
類這導致用戶定義run()
方法來執行的方法run()
。
以下是從Thread類的run()
方法實現:
@Override
public void run() {
if (target != null) {
target.run();
}
}
我的問題是,當我們擴展java.lang.Thread
類,當我們如下調用start()
方法。
public class HelloThread extends Thread {
public void run() {
System.out.println("Hello from a thread!");
}
public static void main(String args[]) {
(new HelloThread()).start();
}
}
在上述情況下target = null
所以它是本機方法的(start0()
)責任來設定目標= HelloThread的實例?在擴展Thread
類的情況下,如何調用run()
方法?