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は内部で1つを使用します)。しかし、なぜタイマーを使って更新をGUIに伝えているのですか?なぜそれをリアルタイムでしないのですか?更新が多すぎますか?スイングスレッドが回転しているのを心配していますか? – Adamski