Как запускать задачи с запланированной скоростью, чтобы не ждать задачи перед ней? - PullRequest
0 голосов
/ 31 декабря 2018

В настоящее время у меня есть некоторый код, который мне нужно запускать каждые (например) 33 миллисекунды.Однако операция, которую я вызываю, требует около 270 мс.Есть ли способ запланировать мои задачи так, чтобы они выполнялись независимо от задачи перед ними?

Я попытался реализовать переменную ScheduledExecutorService и запустить задачу с "ScheduledFixedRate", но которая в настоящее время ожидает задачу перед ней,

Runnable imageCapture = new Runnable() {

        public void run() {
            // code that takes approximately 270ms
        }
    };

executor = Executors.newScheduledThreadPool(4);
executor.scheduleAtFixedRate(imageCapture, 0, 33, TimeUnit.MILLISECONDS);

1 Ответ

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

Разделите задачу на две части: одна выполняет текущие вычисления, а другая выполняется периодически и запускает первую:

executor = Executors.newScheduledThreadPool(4);

Runnable imageCapture = new Runnable() {

    public void run() {
        // code that takes approximately 270ms
    }
};

Runnable launcher = new Runnable() {

    public void run() {
        executor.execute(imageCapture);
    }
};

executor.scheduleAtFixedRate(launcher, 0, 33, TimeUnit.MILLISECONDS);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...