我有一个阻塞的对象队列。
我想写一个线程阻塞直到队列中有一个对象。类似于 BlockingQueue.take() 提供的功能。
但是,由于我不知道我是否能够成功处理该对象,所以我只想 peek() 而不是删除该对象。只有当我能够成功处理它时,我才想删除它。
所以,我想要一个阻塞 peek() 函数。目前,根据 javadocs,如果队列为空,peek() 只会返回。
我错过了什么吗?还有其他方法可以实现此功能吗?
编辑:
如果我只是使用线程安全队列并偷看和睡觉,有什么想法吗?
public void run() {
while (!exit) {
while (queue.size() != 0) {
Object o = queue.peek();
if (o != null) {
if (consume(o) == true) {
queue.remove();
} else {
Thread.sleep(10000); //need to backoff (60s) and try again
}
}
}
Thread.sleep(1000); //wait 1s for object on queue
}
}
请注意,我只有一个消费者线程和一个(单独的)生产者线程。我想这不如使用 BlockingQueue 高效......任何评论表示赞赏。