2015-04-22 1 views
2

Я хочу реализовать очереди элементов в Android/Java таким образом, чтоJava извлечь все элементы из очереди, пока не опустеет

  1. Когда я вставить элемент в этой очереди, то этот элемент будет немедленно начните выполнение, если это единственный элемент в очереди.
  2. Если в очереди есть другие элементы, они выполняются последовательно один за другим.
  3. После того, как все элементы выполнены, очередь ожидает ввода нового элемента. После того, как элемент вставлен, он снова запустит выполнение.

Что может быть лучшей коллекцией для использования в этом сценарии? Существуют ли какие-либо дефолтные обратные вызовы любой коллекции, которые удовлетворяют условию 3?

Одна реализация, я думаю, пишет метод в моей очереди impelementation что-то вроде

public static void executeNext() { 
    Executor element = getFirst(); 
    if (element != null && element.doneExecuting()) { 
     pop(); 
    } 

    Executor next = getFirst(); 
    next.execute(); 
} 

, который будет вызываться из моего Executor объекта класса (который является элементом моей очереди), как только выполнение отделки

public void onExceutionComplete(){ 
    ExecutionQueue.getInstance().executeNext(); 
} 

ответ

0

Почему вы не пытаетесь реализовать слушателя, который будет продолжать слушать очередь.

Это позволит убедиться, что как только появятся новые записи, они начнут выполняться.

+0

Это означает, что поток продолжает работать постоянно, который проверяет, нет ли очереди в очереди. Разве это неэффективно? Я хочу получить обратный вызов, когда очередь пуста или элемент добавлен к ней. – Rajkiran

+0

напишите свой собственный класс слушателя. где вы можете написать свой собственный метод (обратный вызов) и после обработки каждой проверки входа для размера, если размер равен 0, вызовите обратный вызов. –

+1

@ Rajkiran No. Нить находится в состоянии ожидания, пока в очереди не появится что-то. См. [BlockingQueue] (http://docs.oracle.com/javase/7/docs/api/java/util/concurrent/BlockingQueue.html) –

3

Что вам нужно, описано в JavaDoc. Существует реализация под названием SerialExecutor, которая может соответствовать вашей проблеме.

+0

Выглядит именно то, что я искал. Благодарю. – Rajkiran

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