Предположим, у меня есть задача, которая вытягивает элементы из java.util.concurrent.BlockingQueue и обрабатывает их.ScheduledExecutorService с переменной задержкой
public void scheduleTask(int delay, TimeUnit timeUnit)
{
scheduledExecutorService.scheduleWithFixedDelay(new Task(queue), 0, delay, timeUnit);
}
Как я могу запланировать/перенести задачу, если частота может быть изменена динамически?
- Идея заключается в том, чтобы принять поток обновлений данных и распространять их в пакетном режиме с графическим интерфейсом
- Пользователь должен иметь возможность изменять частоту обновлений
Мне непонятно, почему вы используете блокирующую очередь. если ваша очередь пуста. Я предполагаю, что запланированное задание будет заблокировано. это ваше намерение? это, вероятно, путает время планирования планировщика задач. –
Я выбрал реализацию ArrayBlockingQueue, поскольку он должен быть потокобезопасным, уважать порядок FIFO и быть ограниченным. Даже если блок задач, он не должен путать планирование задач, если оно? – parkr
Вы правы в использовании реализации BlockingQueue (фактически ScheduledThreadPoolExecutor использует его внутри). Однако почему вы распространяете свои обновления в GUI, используя таймер? Почему бы не сделать это в режиме реального времени? Есть ли слишком много обновлений? Вы беспокоитесь о том, как крутится нить? – Adamski