【问题标题】:Introduce accurate delays in java在java中引入准确的延迟
【发布时间】:2019-05-14 06:50:01
【问题描述】:
我正在使用我的 java 程序通过 Arduino 控制电机。我计划介绍软件本身的延迟,而不是 Arduino。由于使用thread.sleep() 引入延迟非常不准确,我该如何准确地做到这一点?此外,我想暂停延迟,在恢复时,我希望软件完成其余的延迟。比如我保持1000毫秒的延迟,700毫秒的暂停,我想停止电机;恢复后,我想完成剩下的 300 毫秒。如果我使用 while 循环直到 System.currentTimeMillis() 达到特定的时间量,效率会有多高?
【问题讨论】:
标签:
java
arduino
delay
sleep
【解决方案1】:
使用ScheduledThreadPoolExecutor。 ScheduledExecutorService 是一个执行器服务,允许您在 Java 中安排未来和重复执行的异步任务。
据观察,使用ScheduledExecutorService 执行的长时间/重复任务可能会导致内存泄漏。从 Java 7 开始,ScheduledThreadPoolExecutor 公开了一个新方法 setRemoveOnCancelPolicy。确保设置此标志,作为预防措施。
ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
// Explicitly call setRemoveOnCancelPolicy on the instance
executor.setRemoveOnCancelPolicy(true);
根据 javaDoc,setRemoveOnCancelPolicy 设置取消任务是否应立即执行的策略
在取消时从工作队列中删除。这个值是由
默认为假