Supponiamo di avere un task che sta richiamando elementi da un java.util.concurrent.BlockingQueue ed elaborandoli.ScheduledExecutorService con ritardo variabile
public void scheduleTask(int delay, TimeUnit timeUnit)
{
scheduledExecutorService.scheduleWithFixedDelay(new Task(queue), 0, delay, timeUnit);
}
Come posso programmare/riprogrammare l'attività se la frequenza può essere modificata in modo dinamico?
- L'idea è quella di prendere un flusso di aggiornamenti dei dati e li propagano in batch per una GUI
- L'utente deve essere in grado di variare la frequenza degli aggiornamenti
Non mi è chiaro il motivo per cui si sta utilizzando una coda di blocco. se la tua coda è vuota. Presumo che l'attività pianificata verrà bloccata. è questa la tua intenzione? questo probabilmente confonderà i tempi del programmatore dell'attività. –
Ho scelto l'implementazione ArrayBlockingQueue in quanto deve essere protetta da thread, rispettare l'ordinamento FIFO ed essere limitata. Anche se blocchi l'attività, non dovrebbe confondere la pianificazione delle attività dovrebbe? – parkr
Si sta utilizzando correttamente un'implementazione BlockingQueue (infatti ScheduledThreadPoolExecutor ne utilizza uno internamente). Tuttavia, perché stai propagando gli aggiornamenti alla GUI usando un timer? Perché non farlo in tempo reale? Ci sono troppi aggiornamenti? Sei preoccupato per la rotazione del filo di Swing? – Adamski