- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我遇到了与作者类似的问题: DelayQueue with higher speed remove()?
问题:我需要处理连续传入的数据并检查数据是否在之前的某个时间范围内被看到过。因此,我计算传入数据的唯一 ID,并将按 ID 索引的数据添加到 map 中。同时,我将 ID 和超时时间戳存储在 PriorityQueue 中,使我能够有效地检查最新的超时 ID。不幸的是,如果数据在指定的超时之前再次进入,我需要更新存储在 PriorityQueue 中的超时。到目前为止,我只是删除了旧 ID,并重新添加了 ID 和新超时。如果我的 PriorityQueue 元素增长超过 300k,除了耗时的删除方法之外,这种方法效果很好。
可能的解决方案:我只是考虑使用 DelayQueue 来代替,这样可以更容易地等待第一个数据超时,不幸的是我还没有找到一种有效的方法来更新存储在这样的 DelayQueue 中的超时元素,而不会面临与 PriorityQueue 相同的问题:remove 方法!
关于如何以有效的方式解决这个问题(即使对于一个巨大的队列)有什么想法吗?
最佳答案
这实际上听起来很像 Guava Cache
,这是一个并发堆上缓存,支持“在最近一次查找此条目后过期这么长时间”。如果您可以使用第三方库,那么重用它可能是最简单的。
关于java - 高效更新 DelayQueue 中的元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27948867/
我需要一个队列来自动删除早于给定毫秒数的元素 - 基本上,我希望队列中的项目在一段时间后过期。 我看到有一个延迟队列似乎在做相反的事情:“一个元素只能在其延迟到期时被采用。” (我从未使用过它)。 也
在 Java 7 中,DelayQueue 的实现使用了没有公平策略的 ReentrantLock。从长远来看,这是一个问题吗?线程会因此而饿死吗? 谢谢 最佳答案 如果您考虑 ScheduledTh
我遇到了与作者类似的问题: DelayQueue with higher speed remove()? 问题:我需要处理连续传入的数据并检查数据是否在之前的某个时间范围内被看到过。因此,我计算传入数
我有以下据称非常简单的 DelayQueue 演示. class DelayedThing implements Delayed { private final long waitUntil;
我刚开始用 java 编码,我正在努力设置 DelayQueue, 我想这样, DelayQueue queue = new DelayQueue(); If (counter > 0){ queue
我将在模拟 parking 场的程序中使用 Collections 接口(interface)中的 DelayQueue。我想知道在没有元素过期的情况下是否有多个 take 方法调用队列,最后一个 t
下面的 java 代码示例使用 java DelayQueue 来处理任务。然而,从另一个线程插入任务似乎会破坏(我的)预期行为。 很抱歉代码示例太长,但总而言之: 主线程将 5 个任务 (A-E)
我正在使用 LinkedBlockingQueue 队列来实现用于 TCP/IP 事件传输的生产者-消费者模式,我正在使用 boolean offer(e)这意味着一旦队列达到其容量,新传入的事件将被
我正在尝试创建一个 ThreadPoolExecutor: // Thingy implements Delayed and Runnable ExecutorService executor = n
我想要一个DelayQueue计划的 Runnable 的数量,其中每个 Runnable 只能在预先指定的某个时间点之后运行。因此,线程可以继续从该队列中删除可运行对象并处理事件计划。为什么 Del
我想遍历我的 DelayQueue 中未过期的元素。类Transaction实现了Delayed,有一个字段timestamp,代表一笔交易发起时的UTC时间戳(不是当前时间戳) public cla
我是一名优秀的程序员,十分优秀!