gpt4 book ai didi

java - start() 方法从 start() 调用线程......令人困惑

转载 作者:行者123 更新时间:2023-11-30 02:15:07 24 4
gpt4 key购买 nike

我一直在摆弄创建一个运行渲染的线程,并且我遇到了这种实现它的方法:

Class Main implements Runnable {
private Thread thread;
private boolean running = false;

public void start() {
running = true;
thread = new Thread(this, "renderingThread")
thread.start(); //calls run()
}

public void run() {

init(); //init glfw + create window

while(running) {
update();
render();
}
}

public static void main(String[] args) {
new Main().start()
}

请注意,仅包含与线程相关的代码部分。

现在,程序流程看起来像这样(如果我错了请纠正我):构造Main类型/类的新对象(因此,在堆上保留一个位置)。然后,调用 Main 类型对象的 start() 方法。 running boolean 值设置为 true。然后,通过构造函数 Thread (Runnable target, String name) 创建一个新线程 - 在我的例子中,第一个参数是 this 关键字,意味着对象的引用Main 类型作为第一个参数传递(因为该方法已由 Main 类型的对象调用)。然后,下一行是最让我烦恼的。 thread 引用调用方法 start(),但它以某种方式引用 run() 方法。怎么办?

我非常感谢您对线程对象的 start() 方法如何引用 run() 方法进行彻底的解释。

最佳答案

您创建一个新的Thread,其Runnable目标为this(Main类的实例)。 Main 实现 Runnable 意味着方法 run() 被重写。 Thread 类本身实现了 Runnable

当您使用上面的配置启动线程时,方法 start() 会导致线程开始执行;然后,Java 虚拟机调用 Thread 对象的 run() 方法。 documentation中说。如果您好奇,请查看 java.lang.Thread 的源代码.

您可以用更简单的方法达到相同的效果:

public class Main implements Runnable { 

@Override
public void run() {
System.out.println("New thread");
}

public static void main(String[] args) {
new Thread(new Main()).start();
System.out.println("Main thread");
}
}

关于java - start() 方法从 start() 调用线程......令人困惑,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48814386/

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