Java多线程,主线程停止了为什么?
我正在尝试为LWJGL的Display.update()创建一个单独的线程,但主线程正在休眠或在第二个线程运行时停止,如何使两个线程同时执行Java多线程,主线程停止了为什么?,java,multithreading,lwjgl,Java,Multithreading,Lwjgl,我正在尝试为LWJGL的Display.update()创建一个单独的线程,但主线程正在休眠或在第二个线程运行时停止,如何使两个线程同时执行 public Window(int width, int height, String title){ } @Override public void run() { try { Display.setDisplayMode(new DisplayMode(800, 600)); Display.create()
public Window(int width, int height, String title){
}
@Override
public void run() {
try {
Display.setDisplayMode(new DisplayMode(800, 600));
Display.create();
} catch (LWJGLException e) {
e.printStackTrace();
}
while(!Display.isCloseRequested()){
Display.update();
Main.Render();
}
Display.destroy();
}
}
改变这个,
Thread windowThread = new Thread(window);
windowThread.run();
作为
从
Thread类中单独的start()和run()方法提供了两种创建线程程序的方法。start()方法启动新线程的执行并调用run()方法。start()方法立即返回,新线程通常会继续,直到run()方法返回为止
线程类的run()方法不执行任何操作,因此子类应该使用代码重写该方法,以便在第二个线程中执行。如果使用Runnable参数实例化线程,则线程的run()方法将在新线程中执行Runnable对象的run()方法
根据线程程序的性质,直接调用Thread run()方法可以得到与通过start()方法调用相同的输出,但在后一种情况下,代码实际上是在新线程中执行的
不要调用
run
——它不会创建新线程。调用start
。(如果只调用run
以外的任何内容,可能会避免太多混乱。)@user2864740,这是一个不好的重定向主题的地方,因为它不能直接回答问题。问题是,“为什么这不起作用?”,直接的答案是Rakesh KR在下面所说的。@jameslarge我并不觉得它“不好”,特别是因为投票率高的答案(不幸的是,除了被接受的答案)涵盖了这个问题。如果您有更好的副本(因为有很多),请随意选择。@jameslarge、、、、Re“start()方法启动新线程的执行并调用run()方法。”否!start()方法不调用run()方法。start()方法创建一个新线程并返回。run()方法是由新线程中的某些东西调用的(我不知道是什么,我们大多数人也不需要知道)。除了技术错误之外,您引用的文本令人困惑。这里有一个更简单的解释:Thread.start()方法由库提供,供代码调用以启动新线程。run()方法由您的代码提供,供库在新线程中调用。此外,扩展thread类是一种黑客行为,并且具有局限性。因为你不应该扩展线程
,除非你想创建一种新的线程
。(例如,一个线程在它的interrupt()
方法中做了一些特殊的簿记。)这是一个限制,因为Java只有一个继承:如果你的类扩展了thread,那么它就不能扩展其他任何东西,但是如果它实现了Runnable
,它可以扩展其他东西。
Thread windowThread = new Thread(window);
windowThread.run();
Thread windowThread = new Thread(window);
windowThread.start();