Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.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 锁定游戏更新速度导致CPU使用率高。当我什么都不做的时候,如何让线程睡眠?_Java - Fatal编程技术网

Java 锁定游戏更新速度导致CPU使用率高。当我什么都不做的时候,如何让线程睡眠?

Java 锁定游戏更新速度导致CPU使用率高。当我什么都不做的时候,如何让线程睡眠?,java,Java,所以我目前正在学习如何做到这一点,有人说代码效率低下,因为当没有任何更新时线程仍在运行。当我在任务管理器中查看CPU使用情况时,当只渲染一个黑屏时,CPU列中的CPU使用率高达35-45%,CPU列中的CPU使用率高达20%。当CPU不更新任何内容时,有没有办法使线程休眠 谢谢 public void run() { long lastTime = System.nanoTime(); long timer = System.currentTimeMillis(); f

所以我目前正在学习如何做到这一点,有人说代码效率低下,因为当没有任何更新时线程仍在运行。当我在任务管理器中查看CPU使用情况时,当只渲染一个黑屏时,CPU列中的CPU使用率高达35-45%,CPU列中的CPU使用率高达20%。当CPU不更新任何内容时,有没有办法使线程休眠

谢谢

public void run() {

    long lastTime = System.nanoTime();
    long timer = System.currentTimeMillis();
    final double ns = 1000000000.0 / 60.0;         
    double delta = 0;

    int frames = 0;
    int updates = 0;

    while (running) {
        long now = System.nanoTime();
        delta += (now - lastTime) / ns;
        lastTime = now;
        while(delta >= 1) {
            update();
            updates++;
            delta--;
        }

        render();
        frames++;

        if(System.currentTimeMillis() - timer > 1000) {
            timer += 1000;
            updates = 0;
            frames = 0;
        }
    }
    stop(); 
}

唯一好的方法是执行yourThread.wait,当游戏停止执行操作时,然后执行yourThread.notify,当游戏再次执行操作时。

您不应该在自己的线程上渲染。SWING是线程不安全的,因此所有GUI操作都应该在SWING线程上进行。正好SWING有一根专门为它做的线

timer = new javax.swing.Timer(1000 / 60, this);
timer.start();


@Override
public void actionPerformed(ActionEvent e) {
    // Do your stuff (ignore 'e')
}

@Acecle Np,如果这有帮助,我很高兴。如果这个问题有帮助的话,也别忘了把它标记为已接受。这不是什么。开始。它只用于第一次启动线程,而不是中断睡眠调用。@DanGetz噢,我的糟糕!我会改正的这是错的。如果你不理解主题,就不应该写答案。因为OP没有提到他们使用的框架,这比回答更好,因为我看到了渲染和60 fps,并且代码风格,这是一个有根据的猜测。但它仍然只是一个猜测-渲染可以使用缓冲策略或其他框架…最好要求澄清,避免潜在的否决票;作为参考,这看起来很像OP的代码,当你不更新任何东西时,通过事件驱动而不是简单地坐在一个紧密的循环中,你会使线程休眠。计算渲染/更新帧所需的时间与你可能需要休眠的时间之间的差,即大约16毫秒60帧,然后通过thread.sleep休眠为了区别。。。