Я ищу очередь, которая была бы асинхронным (неблокирующим) эквивалентом java.util.concurrent.BlockingQueue
. Его интерфейс будет включать:
public interface AsynchronousBlockingQueue<E> {
// - if the queue is empty, return a new CompletableFuture,
// that will be completed next time `add` is called
// - if the queue is not empty, return a completed CompletableFuture,
containing the first element of the list
public CompletableFuture<E> poll();
// if polling is in progress, complete the ongoing polling CompletableFuture.
// otherwise, add the element to the queue
public synchronized void add(E element);
}
Если это имеет значение, должен быть только один поток опроса, и опрос должен выполняться последовательно (poll
не будет вызываться, когда опрос уже выполняется).
Я ожидал, что это уже существует в JVM, но не смог найти его, и, конечно, я бы предпочел использовать что-то из JVM, чем писать сам.
Еще одно ограничение, я 'Я застрял с Java 8 (хотя мне определенно интересно узнать, что существует в более поздних версиях).