【发布时间】:2021-01-17 13:51:16
【问题描述】:
我目前正在使用 ConcurrentLinkedQueue,这样我就可以使用自然顺序 FIFO 并在线程安全应用程序中使用它。我需要每分钟记录一次队列的大小,并且鉴于此集合不保证大小并且计算大小的成本为 O(N),是否有任何替代的有界非阻塞并发队列可以在获取时使用size 不会是一个昂贵的操作,同时添加/删除操作也不昂贵?
如果没有集合,是否需要使用带锁的LinkedList?
【问题讨论】:
-
给你这个要求的人应该阅读
ConcurrentLinkedQueue的java文档。如果他/她说(或强迫您)使用带锁的Queue,请告诉他/她 高效 和 非阻塞 特性(如文档ConcurrentLinkedQueue说)将丢失。根本没有办法在不阻塞的情况下获得准确的当前大小。甚至维护一个单独的LongAdder或AtomicInteger也无济于事。 -
与查询之间的分钟(60,000,000,000 纳秒)相比,一个“正确”数字的价值是多少?同样,为什么要牺牲主操作的性能来换取每分钟只执行一次的操作的性能?
标签: java collections java-8