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