2015-05-27 14 views
0

У меня есть список событийсписок Обработка событий эффективно

List<Event> events; 

Каждое событие имеет действие и время, когда это действие должно быть активировано. Этот список сортируется, но промежутки времени между последовательными событиями могут быть большими или малыми.

У меня есть отдельный поток с циклом while, но он не эффективен, поскольку промежутки времени могут быть большими. Одно усовершенствование могло бы быть что-то вроде этого:

  1. проверка первый элемент

  2. если дата нормально

    2,1 Процесс события

    2,2 удалить событие из списка

  3. если дата не подходит

    3,1 высчитывает дифф = event_time - actual_time

    3,2 идут спать в течение времени дифф

    3,3 перейдите к 1.

Может быть сделано лучше _

Мой вопрос не является? запуск определенного метода в заданное время. Эти события должны обрабатываться точно в том же порядке, что и в списке событий. Два последовательных события могут иметь одно и то же время.

+1

использование планировщика, ваш подход не так хорошо – Lrrr

+0

чтения над вопросом и его ответами, особенно, кварцевые планировщики хороши, на мой взгляд, – Lrrr

+0

Я думал о TimerTask, но как я могу быть уверен, что если две задачи имеют одно и то же время, они будут обработаны в orde r из данного списка? – Leosu

ответ

0

Использование java.util.concurrent.ScheduledThreadPoolExecutor.

Чтобы запланировать задачу после использования задержки:

schedule(Runnable command, long delay, TimeUnit unit) 

Вот в JavaDoc: ScheduledThreadPoolExecutor

Вот некоторые примеры: Examples

Смежные вопросы