【发布时间】:2018-05-31 15:26:39
【问题描述】:
短版:我怎样才能最好地在 Java 中实现阻塞 FIFO 队列,如果队列中的项目当时不满足某些条件,则能够暂时跳过或跳过它们从队列中弹出?
加长版:
多年来,我一直在一个应用程序中使用 ArrayBlockingQueue,它对我的目的运行良好。到目前为止,我只需要调用 put() 和 take()。效果很好。
现在需要一个元素在通过 take() 检索时满足某些条件。如果它不符合标准,它应该回到队列中,但在之前的相同位置。
想象一下国际机场的海关排队。出于某种原因,乘客在上线时只收到了报关单。乘客们都在疯狂地涂鸦,以在轮到他们之前完成他们的表格。队伍前面有一名保安。当海关官员准备好迎接下一位乘客时,保安检查线路上的第一位乘客是否填写了海关申报单。如果是这样,他会将乘客送到海关官员那里。如果不是,他检查第二个乘客,然后检查第三个,等等,直到他找到完成的人。他把那个人送到海关官员那里。每次海关官员有空时都会发生同样的情况,总是从线路上的第一位乘客出发。
在研究中,我唯一想到的是使用双端队列(deque)并将元素从前面取出,直到找到符合条件的元素。然后按照我取下它们的相反顺序将元素放回前面。
有人推荐吗?
【问题讨论】: