Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/306.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java多线程,主线程停止了为什么?_Java_Multithreading_Lwjgl - Fatal编程技术网

Java多线程,主线程停止了为什么?

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()

我正在尝试为LWJGL的Display.update()创建一个单独的线程,但主线程正在休眠或在第二个线程运行时停止,如何使两个线程同时执行

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();