您的AsyncQueue非常类似于BlockingQueue,例如ArrayBlockingQueue.返回的Future将简单地委托给ArrayBlockingQueue方法.例如,Future.get会调用blockingQueue.poll.
至于你的更新,我假设调用add的线程应该调用回调,如果有一个等待?如果是这样,这是一个简单的任务,即为元素创建一个队列,并为回调创建一个队列.
>添加后,检查是否有回调等待,然后调用它,否则将元素放在元素队列上
>轮询时,检查是否有元素在等待,然后用该元素调用回调,否则将回调放在回调队列上
代码大纲:
class AsyncQueue {
Queue> callbackQueue = new LinkedList<>();
Queue 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 c) {
if (elementQueue.size() > 0)
c.accept(elementQueue.remove());
else
callbackQueue.offer(c);
}
}