【发布时间】:2014-08-12 17:49:49
【问题描述】:
尝试使用 Java 的 DelayQueue,我必须实现需要 compareTo() "method that provides an ordering consistent with its getDelay method." 的 Delayed 接口。目的当然是DelayQueue 可以轻松地对排队的对象进行排序,以便下一个用完延迟的对象可以返回给任何接受者。
现在我还需要提前从队列中删除对象。我需要打电话给delayQueue.remove(queuedObject)。这当然只有在队列对象有一个 equals() 方法来反映它们的有效负载而不是完全不相关的剩余延迟时间时才有效。
因此,compareTo() 是基于剩余延迟时间,而equals() 是基于排队对象的负载,因此它们并不一致,正如javadoc of Comparable 中的“强烈推荐”。
问题:是我遗漏了什么还是DelayQueue 的设计确实有点怪癖?
【问题讨论】:
-
嗯,它是“强烈推荐(尽管不是必需的)”,所以我不会说你必须违反某些东西。 JRE 中有一些类的
compareTo与equals不一致,包括实现Delayed的ScheduledFutureTask。
标签: java concurrency equals compareto