Java 在'中是否存在FilteringBlockingQueue的现有实现;普遍接受';图书馆(雅加达公共场所、番石榴、春天等)

Java 在'中是否存在FilteringBlockingQueue的现有实现;普遍接受';图书馆(雅加达公共场所、番石榴、春天等),java,concurrency,Java,Concurrency,jdk中有PriorityBlockingQueue,它能够使用(提供的或默认的)比较器对元素进行排序 现在我需要一个FilteringBlockingQueue,这是一个并发队列,它在给定的时间点上仅提供基于动态筛选器的元素子集,轮询操作不会删除元素,而是更改元素的状态 更改元素的状态还应产生一个信号,以便任何等待(poll()调用内)的线程都能够获取该项并继续 其思想是使用不同的分区保持单个并发集合,每个分区都是具有相同状态的元素的子集 轮询应该通过在相同的原子操作中传递谓词和将元素移动到另

jdk中有PriorityBlockingQueue,它能够使用(提供的或默认的)比较器对元素进行排序

现在我需要一个FilteringBlockingQueue,这是一个并发队列,它在给定的时间点上仅提供基于动态筛选器的元素子集,轮询操作不会删除元素,而是更改元素的状态

更改元素的状态还应产生一个信号,以便任何等待(poll()调用内)的线程都能够获取该项并继续

其思想是使用不同的分区保持单个并发集合,每个分区都是具有相同状态的元素的子集

轮询应该通过在相同的原子操作中传递谓词和将元素移动到另一个分区的mutator来完成

这样的东西是否已经存在于“标准”库中(它是否有一个已知的名称)


编辑:我在这里发现了一个类似的请求:但是没有任何可接受的答案…

这个问题类似于要求一个
过滤器堆栈
:如果数据结构的不同用户通过使用不同的过滤器看到完全不同的行为(例如,每个人看到的堆栈顶部不同),那么它真的是一个
堆栈吗?经典数据结构(及其并发版本)具有定义良好的语义和众所周知的最佳实现。如果更改语义,这些实现将不再工作

如果需要以线程安全的方式在运行时和每个线程更改顺序和过滤器,我建议使用内存中的数据库,如HSQLDB、H2或Derby。通过使用objectdb,还可以避免从对象映射到关系格式的开销,反之亦然


或者,您可以编写自己的实现,但要注意,快速安全的多线程代码是众所周知的难以编写的。只有当性能确实是一个瓶颈时,我才会写它。

我在Hikari连接池库中发现了一个ConcurrentBag,这正是我所寻找的数据结构:它是一个并发集合,允许客户从中“借用”一个项目。借阅意味着物品应该放在袋子里,其状态不象STATE\u not\u in\u USE、STATE\u in\u USE。。。