Supongamos que tengo una tarea que está extrayendo elementos de un java.util.concurrent.BlockingQueue y procesándolos.ScheduledExecutorService with variable delay
public void scheduleTask(int delay, TimeUnit timeUnit)
{
scheduledExecutorService.scheduleWithFixedDelay(new Task(queue), 0, delay, timeUnit);
}
¿Cómo puedo programar/reprogramar la tarea si la frecuencia puede cambiarse dinámicamente?
- La idea es tener un flujo de actualizaciones de datos y propagarlas en el lote a una interfaz gráfica de usuario
- El usuario debe ser capaz de variar la frecuencia de las actualizaciones
No tengo claro por qué está utilizando una cola de bloqueo. si la cola está vacía. Supongo que su tarea programada será bloqueada. es esa tu intención? esto probablemente confundirá el tiempo del programador de tareas. –
Elegí la implementación de ArrayBlockingQueue, ya que tiene que ser segura para los hilos, respetar el orden FIFO y estar limitada. Incluso si la tarea bloquea, no debería confundir la programación de la tarea si es así? – parkr
Tiene razón al usar una implementación BlockingQueue (de hecho, ScheduledThreadPoolExecutor usa una internamente). Sin embargo, ¿por qué estás propagando tus actualizaciones a la GUI usando un temporizador? ¿Por qué no hacerlo en tiempo real? ¿Hay demasiadas actualizaciones? ¿Te preocupa que el hilo Swing gire? – Adamski