【问题标题】:Java multithreading, main thread has stopped why? [duplicate]Java多线程,主线程为什么停止了? [复制]
【发布时间】:2014-10-18 19:45:30
【问题描述】:

我正在尝试为 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();

}

}

public static void main(String[] args) {
    //To be moved
    Window window = new Window(100, 100, "1");
    Thread windowThread = new Thread(window);
    windowThread.run();

    System.out.print("I am workign, please show me!");
}

public static void Render(){

    System.out.println("Hello There!");

}

【问题讨论】:

标签: java multithreading lwjgl


【解决方案1】:

改变这个,

Thread windowThread = new Thread(window);
windowThread.run();

作为,

Thread windowThread = new Thread(window);
windowThread.start();

来自Here

Thread 类中单独的 start() 和 run() 方法提供了两种创建线程程序的方法。 start() 方法开始执行新线程并调用 run() 方法。 start() 方法立即返回,新线程通常会继续,直到 run() 方法返回。

Thread 类的 run() 方法什么都不做,所以子类应该用代码覆盖该方法以在第二个线程中执行。如果使用 Runnable 参数实例化 Thread,则该线程的 run() 方法将在新线程中执行 Runnable 对象的 run() 方法。

根据线程程序的性质,直接调用 Thread run() 方法可以得到与通过 start() 方法调用相同的输出,但在后一种情况下,代码实际上是在新线程中执行的。

【讨论】:

  • Re "start() 方法开始执行新线程并调用 run() 方法。"不! start() 方法不 调用 run() 方法。 start() 方法创建一个新线程并返回。 run() 方法被某个东西调用(我不知道是什么,我们大多数人也不需要知道)在新线程中。
  • 除了技术错误之外,您引用的那段文字令人困惑。这是一个更简单的解释: Thread.start() 方法由库提供,供您的代码调用以启动新线程。 run() 方法由您的代码提供,以便库在新线程中调用。
  • 另外,扩展 Thread 类是骇人听闻的,而且是有限的。 Hackish 因为你不应该扩展 Thread,除非你想创建一个新的 kind Thread。 (例如,一个线程在其 interrupt() 方法中进行了一些特殊的记账。)这是有限制的,因为 Java 只有单一继承:如果你的类扩展了 Thread,那么它就不能扩展其他任何东西,但它可以 i> 如果implements Runnable 扩展其他内容。
猜你喜欢
  • 2011-11-16
  • 2020-08-31
  • 2013-11-22
  • 2012-10-11
  • 1970-01-01
  • 2013-05-05
  • 1970-01-01
相关资源
最近更新 更多