Асинхронное выполнение в BlockingQueue

Я использую Java-коллекции BlockingQueue для обработки данных. Текущий код выглядит так

while(true){
    if(queue.size() > 0)
        handle(queue.take())
}

Есть ли способ (в Java или других средах), где я могу обрабатывать его асинхронно, например,

queue.setHandler(new Handler<E>());

где-то в классе..

class Handler implements IHandler<E>{
    void handle(E e){
        handle(e)
    }
}

person MIK    schedule 26.09.2015    source источник
comment
Это ужасно широко, но вы, возможно, ищете RxJava.   -  person chrylis -cautiouslyoptimistic-    schedule 26.09.2015
comment
ExecutorService executorService = Executors.newFixedThreadPool(10); executorService.execute (новый Runnable () { public void run () { System.out.println (асинхронная задача); } }); executorService.shutdown();   -  person Ravindra babu    schedule 26.09.2015
comment
@sunrise76 - ES не вариант, подход заключается не в создании потоков, фреймворк должен вызывать обработчик синхронно, аналогично фреймворку прослушивателя.   -  person MIK    schedule 26.09.2015
comment
В вашем вопросе говорится об обработке асинхронных событий с блокирующей очередью. ThreadpoolExecutor, который принимает очередь блокировки в качестве параметра в конструкторе, сделает то же самое. Если вы не хотите создавать потоки, установите максимальное ограничение равным одному. События очереди блокировки будут обрабатываться одно за другим.   -  person Ravindra babu    schedule 26.09.2015
comment
Если вы заглянете внутрь фреймворка, который выполняет сообщения асинхронно по вашему желанию, вы обнаружите, что он делает это так, как вы это делаете сейчас. Таким образом, эта структура только скрывает то, что происходит на самом деле. Зачем нужен такой фреймворк?   -  person Alexei Kaigorodov    schedule 26.09.2015
comment
Строка if(queue.size() › 0) избыточна. Он потребляет процессорное время, но не добавляет никакой полезной функциональности. Его можно безопасно удалить.   -  person Alexei Kaigorodov    schedule 26.09.2015