我一直在摆弄创建一个运行渲染的线程,并且我遇到了这种实现它的方法:
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/