Details:对于很多我开发的程序,我经常使用这段代码(或一些细微的变体)来“勾选”一个方法,设置为varaible (如果设置为32,它每秒钟调用该方法32次)。这是非常重要的,所以我不能从我的代码中删除它,因为动画和其他各种部分都会中断。
不幸的是,它似乎使用了相当数量的cpu使用,因为我不知道的原因。不久前,我曾考虑使用thread.sleep()来解决这个问题,但根据this post的说法,这是不可行的,因为这需要相当精确的时间。
在我公认的短测试中,它使用的cpu不多,大约6%-11%的cpu用于1700,但考虑到它所做的事情非常少,它仍然非常多。是否有一个较少的cpu密集的方法来完成这一点?或者是定期使用的时间。
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使用率完成相同的代码,并在每秒执行一定数量的代码时保持合理的定时。
发布于 2018-01-24 00:20:03
一个简单的选择,不应该使用那么多的CPU是使用ScheduledExecutorService。例如:
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(() -> {
}, 0, 31250, TimeUnit.MICROSECONDS);
}注意,31250表示转换为微秒的1/32秒的值,因为该参数接受long。
https://stackoverflow.com/questions/48412842
复制相似问题