Введите точные задержки в Java - PullRequest
0 голосов
/ 13 декабря 2018

Я использую Java-программу для управления двигателем через Arduino.Я планирую ввести задержки в самом программном обеспечении, а не в Arduino.Как я могу точно сделать это, поскольку введение задержек с использованием thread.sleep() очень неточно?Кроме того, я хочу приостановить задержку, и после возобновления я хочу, чтобы программное обеспечение завершило оставшуюся задержку.Например, если я сохранил задержку в 1000 миллисекунд и сделал паузу в 700 миллисекунд, я хочу остановить двигатель;после возобновления я хочу закончить оставшиеся 300 миллисекунд.Насколько было бы эффективно, если бы я использовал цикл while, пока System.currentTimeMillis() не достигнет определенного времени?

1 Ответ

0 голосов
/ 13 декабря 2018

Используйте ScheduledThreadPoolExecutor.ScheduledExecutorService - это служба исполнителя, которая позволяет планировать будущие и повторяющиеся асинхронные задачи в Java.

Было отмечено, что длинные / повторяющиеся задачи, выполняемые с использованием ScheduledExecutorService, могут привести к утечкам памяти.Начиная с Java 7, ScheduledThreadPoolExecutor предоставил новый метод setRemoveOnCancelPolicy.Убедитесь, что этот флаг установлен, в качестве меры предосторожности.

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

Согласно javaDoc, setRemoveOnCancelPolicy устанавливает политику того, должны ли отмененные задачи немедленно удаляться из рабочей очереди во время отмены.Это значение по умолчанию false

...