Ser*_*aev 6 java concurrency java.util.concurrent
鉴于队列的以下变化:
interface AsyncQueue<T> {
//add new element to the queue
void add(T elem);
//request single element from the queue via callback
//callback will be called once for single polled element when it is available
//so, to request multiple elements, poll() must be called multiple times with (possibly) different callbacks
void poll(Consumer<T> callback);
}
Run Code Online (Sandbox Code Playgroud)
我发现我不知道如何使用 java.util.concurrent 原语来实现它!所以问题是:
你的与such asAsyncQueue非常相似。返回的结果将简单地委托给方法。例如会打电话。BlockingQueueArrayBlockingQueueFutureArrayBlockingQueueFuture.getblockingQueue.poll
至于您的更新,我假设调用的线程add应该调用回调(如果有一个等待)?如果是这样,那么创建一个元素队列和一个回调队列就是一项简单的任务。
代码概要:
class AsyncQueue<E> {
Queue<Consumer<E>> callbackQueue = new LinkedList<>();
Queue<E> elementQueue = new LinkedList<>();
public synchronized void add(E e) {
if (callbackQueue.size() > 0)
callbackQueue.remove().accept(e);
else
elementQueue.offer(e);
}
public synchronized void poll(Consumer<E> c) {
if (elementQueue.size() > 0)
c.accept(elementQueue.remove());
else
callbackQueue.offer(c);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
8556 次 |
| 最近记录: |