gpt4 book ai didi

java - 当我们扩展 Thread 类时,如何调用 run() 方法

转载 作者:行者123 更新时间:2023-11-30 04:06:16 26 4
gpt4 key购买 nike

在查看java.lang.Thread类的源代码时。好奇的是,我想看看 Thread 类如何调用 run() 方法(用户定义的 run())。当我实现如下 Runnable 接口(interface)时

Thread waiterThread = new Thread(waiter, "waiterThread");
waiterThread.start();

在上面的代码中,Thread 类的构造函数 init() 方法被调用,并且从那里它们将 Runnable 实例初始化为this.target = 目标.

start() 方法中,它们调用 native 方法 start0(),而该方法又可能调用 run() Thread 类的 方法,导致用户定义的 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 在上述情况下,设置 target=HelloThread 的实例是 native 方法 (start0()) 的责任吗?当我扩展 Thread 类时,如何调用我的 run() 方法?

最佳答案

how does a run() method of mine is called in case when I extend Thread class

因为你延长了类(class)。您重写了 run() 方法来执行不同的操作。 @Override 注解用于突出显示该方法重写了父方法。

目标不会神奇地改变,你在代码中忽略了。

关于java - 当我们扩展 Thread 类时,如何调用 run() 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20656211/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com