【问题标题】:Why one Java thread blocks OpenGL rendering that is done in other thread?为什么一个 Java 线程会阻塞在其他线程中完成的 OpenGL 渲染?
【发布时间】:2023-03-06 13:51:01
【问题描述】:

当我尝试在一个线程中执行使用轻量级 Java 游戏库 (LWJGL) 的 Java 代码时,一切正常。但是,当我启动第二个 Java 线程时,它只是不断地打印文本(请参阅下面的文本线程类伪代码),我的 OpenGL 程序变得无响应,但仍然打印了文本。没有显示错误。

 public class TextPrinterThread implements Runnable {
    public void run() {
        while(true) {
            System.out.println("My text");
        }
    }
}

我读到 OpenGL 在多线程 herehere 等方面存在问题,但是我不尝试在多个线程中分离 OpenGL 作业。我只为 OpenGL 和其他线程使用一个线程来执行非 OpenGL 代码。我在互联网上没有找到任何建议是什么原因导致我的问题,我尝试更改线程优先级,但没有帮助。任何帮助将不胜感激。

【问题讨论】:

  • 因为这个线程占用CPU,验证:打印后加sleep,看主线程是否恢复。
  • 我认为更改优先级应该会降低文本打印机线程的 CPU 使用率,因为它没有帮助我排除此选项。但是,您的建议 100% 有效。谢谢你。如果您发布答案,我会接受您的。
  • 在 java 中,你永远不会信任线程优先级,它不会得到保证

标签: java multithreading opengl lwjgl


【解决方案1】:

因为这个线程占用CPU,

验证:打印后添加睡眠,查看主线程是否恢复。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-04-03
    • 1970-01-01
    • 2013-07-11
    • 1970-01-01
    • 2013-11-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多