java BlockingQueue没有阻塞窥视?
2022-09-01 05:26:13
我有一个对象的阻塞队列。
我想写一个阻塞的线程,直到队列上有一个对象。类似于 BlockingQueue.take() 提供的功能。
但是,由于我不知道我是否能够成功处理对象,因此我只想peek()而不删除该对象。仅当我能够成功处理该对象时,我才想删除该对象。
所以,我想要一个阻塞peek()函数。目前,peek() 只是返回队列为空,如 javadocs 所示。
我错过了什么吗?有没有另一种方法可以实现此功能?
编辑:
关于我是否只是使用线程安全队列并偷看和睡觉的任何想法?
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
}
}
请注意,我只有一个使用者线程和一个(单独的)生产者线程。我想这不如使用BlocklingQueue有效...任何意见表示赞赏。