在 java 中引入准确的延迟

Introduce accurate delays in java

我正在使用我的 java 程序通过 Arduino 控制电机。我计划在软件本身而不是 Arduino 中引入延迟。我怎样才能准确地做到这一点,因为使用 thread.sleep() 引入延迟是非常不准确的?此外,我想暂停延迟并在恢复后,我希望软件完成剩余的延迟。比如我保持1000毫秒的延时,700毫秒的暂停,我要停止电机;恢复后,我想完成剩下的 300 毫秒。如果我使用 while 循环直到 System.currentTimeMillis() 达到特定时间,效率会如何?

利用ScheduledThreadPoolExecutorScheduledExecutorService 是一个执行器服务,允许您在 Java 中安排未来和重复的异步任务。

据观察,使用 ScheduledExecutorService 执行的长时间/重复任务可能会导致内存泄漏。从Java7开始,ScheduledThreadPoolExecutor暴露了一个新的方法setRemoveOnCancelPolicy。确保设置此标志,作为预防措施。

ScheduledThreadPoolExecutor executor = new ScheduledThreadPoolExecutor(1);
// Explicitly call setRemoveOnCancelPolicy on the instance
executor.setRemoveOnCancelPolicy(true);

As per javaDoc, setRemoveOnCancelPolicy sets the policy on whether cancelled tasks should be immediately removed from the work queue at time of cancellation. This value is by default false