详细信息:对于我开发的很多程序,我使用此代码(或一些轻微的变体)每隔一段时间“勾选”一个方法,设置为可变tps(如果设置为32,则每秒调用该方法滴答32次)。它非常重要,所以我不能从我的代码中删除它,因为动画和其他各种部分会损坏。
不幸的是,它似乎使用了大量的cpu,原因我不知道。不久前,我在考虑使用thread.sleep()来解决这个问题,但根据这篇文章;它相当不准确,这使得它不可行,因为这需要相当准确的时间。
它没有使用那么多的cpu,在我承认的简短测试中,ryzen 1700的cpu大约是6-11%,但考虑到它的作用有多少,它仍然很多。有没有一种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,在java中有没有一种方法可以在每秒执行一定次数的代码时,以更少的cpu使用并保持合理的时间来完成相同的代码。
一个不应该使用太多 CPU 的简单方法就是使用计划卓越服务
。例如:
public static void main(String[] args) {
ScheduledExecutorService executor = Executors.newSingleThreadScheduledExecutor();
executor.scheduleAtFixedRate(() -> {
}, 0, 31250, TimeUnit.MICROSECONDS);
}
请注意,31250
表示将1/32
秒的值转换为微秒,因为该参数接受long
。
我在中使用带有4.1版本模拟器的android最新版本sdk。一切都很好。但是在我的中,对于任何应用程序的每次运行,我都会得到以下语句。 即使在Hello world应用程序中,我也得到相同的logcat输出。我没有在我的应用程序中使用多线程。有人能告诉我为什么在我的logcat中得到这些日志。 这是我的密码 在我的异步任务中,我从服务器获取JSONArray,解析它并列出。
我需要帮助我的错误就像 代码:
像pdftable和pdfCell,都是操作table的为啥没有单独在pdf packege下面开一个table的包分类呢。 这样大量的类在同一个包下都很难找哇
长期以来, Nutz的主要文档 Nutz手册 Wendal博客上的Nutz分类 这些文档均不是引导式的,而我之前做的各种努力也是针对特定的问题: Nutz每日一发 社区常见问答 Part 1 所以,我尝试用这种引导式的指南,让大家正确使用nutz,按nutz的思路来使用nutz 这本书正在紧张编著中,内容随时更新,更新进度主要看wendal的心情,哈哈
如果你知道为什么会这样,为什么还会这样,请告诉我,这是我的代码:
这个sql查询要6s多,但是我两张表数据量都不是很大呀。box_api_data目前40000条,box_data_info目前10006条。基本都是比较少的,这么个数据量连接查询居然干到了6s,是我sql有问题吗?目前两张表都没有索引。