我一直在努力创建一个运行渲染的线程,并且我已经遇到过这种实现方式:
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 ()方法。 运行布尔值设置为true。然后,通过构造函数 Thread(Runnable target,String name)创建一个新线程 - 在我的例子中,第一个参数是 this 关键字,意味着该对象的引用Main类型作为第一个参数传递(因为该方法已由Main类型的对象调用)。然后,下一行是最让我烦恼的东西。 线程引用调用方法 start (),但它以某种方式引用 run ()方法。怎么样?
我非常感谢能够详细解释 start ()方法如何为线程对象引用 run ()方法。
答案 0 :(得分:2)
您创建了一个新的Thread
,其Runnable
目标为this
(Main
类的实例)。 Main implements 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");
}
}
答案 1 :(得分:0)
看看JavaDoc(https://docs.oracle.com/javase/8/docs/api/java/lang/Thread.html#start--)
当在run()
对象上调用start()时,它会创建一个新的Thread并在该线程上调用EditorViewData
方法。