首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Java --为什么这个基本的滴答类消耗这么多cpu?

Java --为什么这个基本的滴答类消耗这么多cpu?
EN

Stack Overflow用户
提问于 2018-01-24 00:04:04
回答 1查看 91关注 0票数 3

Details:对于很多我开发的程序,我经常使用这段代码(或一些细微的变体)来“勾选”一个方法,设置为varaible (如果设置为32,它每秒钟调用该方法32次)。这是非常重要的,所以我不能从我的代码中删除它,因为动画和其他各种部分都会中断。

不幸的是,它似乎使用了相当数量的cpu使用,因为我不知道的原因。不久前,我曾考虑使用thread.sleep()来解决这个问题,但根据this post的说法,这是不可行的,因为这需要相当精确的时间。

在我公认的短测试中,它使用的cpu不多,大约6%-11%的cpu用于1700,但考虑到它所做的事情非常少,它仍然非常多。是否有一个较少的cpu密集的方法来完成这一点?或者是定期使用的时间。

代码语言:javascript
复制
public class ThreadTest {

    public ThreadTest() {
        int tps = 32;

        boolean threadShouldRun = true;
        long lastTime = System.nanoTime();
        double ns = 1000000000 / tps;
        double delta = 0;
        long now;

        while (threadShouldRun) {
            now = System.nanoTime();

            delta += (now - lastTime) / ns;
            lastTime = now;

            while ((delta >= 1) && (threadShouldRun)) {
                tick();
                delta--;
            }
        }
    }

    public void tick() {

    }

    public static void main(String[] args) {
        new ThreadTest();
    }
}

基本总结:上面的代码使用6-11%的cpu和ryzen 1700,在中有一种方法可以以较低的cpu使用率完成相同的代码,并在每秒执行一定数量的代码时保持合理的定时。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-01-24 00:20:03

一个简单的选择,不应该使用那么多的CPU是使用ScheduledExecutorService。例如:

代码语言:javascript
复制
public static void main(String[] args) {
    ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();

    executor.scheduleAtFixedRate(() -> {

    }, 0, 31250, TimeUnit.MICROSECONDS);
}

注意,31250表示转换为微秒的1/32秒的值,因为该参数接受long

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/48412842

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档