java - Java中的延迟队列实现
问题描述
我是了解线程和并发包的初学者。明白要使用java.util.concurrent.DelayedQueue
我们必须实现java.util.concurrent.Delayed
接口,它有一个抽象方法 getDelay()
long getDelay(TimeUnit unit)
在给定的时间单位内返回与此对象关联的剩余延迟。
@Override
public long getDelay(TimeUnit unit) {
long diff = startTime - System.currentTimeMillis(); // long variable
return unit.convert(diff, TimeUnit.MILLISECONDS); // Not clear about this part which also returns long
}
getDelay 所做的只是得到毫秒差异,我相信我们从上面的 diff 变量中得到,那么为什么我们需要使用 convert 方法?convert 方法说 diff 需要转换为毫秒(为什么它已经以毫秒为单位还需要转换)。如果我的理解没有错,TimeUnit 仅用于指定转换为毫秒。任何人都可以帮助我了解更多关于这个主题的信息。
编辑-1
diff 包含毫秒差异,并打印在下面的屏幕截图控制台中。尝试使用 Timeunit 的 convert 方法,并在下面的控制台中打印,它们完全相同并且是 long 数据类型。当两个值都相同且长数据类型时,为什么我需要使用这个额外的行
unit.convert(diff, TimeUnit.MILLISECONDS);
相反,我也可以不使用 convert 方法直接返回差异。
解决方案
unit
由 的调用者提供getDelay()
。实现必须以 指定的时间单位返回延迟unit
。
因此,unit.convert(diff, TimeUnit.MILLISECONDS)
将diff
用 表示的转换TimeUnit.MILLISECONDS
为unit
。
TimeUnit.MILLISECONDS
指的是什么diff
。diff
然后从 转换TimeUnit.MILLISECONDS
为unit
。
请注意,您还必须实现compareTo()
of Comparable
,它Delayed
扩展。
unit
参数不固定。它由方法的调用者提供,因此可能会有所不同。它可以是TimeUnit.MILLISECONDS
或TimeUnit.SECONDS
任何其他枚举值。这就是您需要使用该convert
方法的原因。
推荐阅读
- python - 如何修复 TypeError: dispatch() missing 1 required positional argument: 'event'
- python - 如何使用 python 从 microservice-1 调用 microservice-2?
- react-native - React Native - AsyncStorage 屏幕在加载时更新内容
- python - 在python中将输入的字符串转换为列表
- ios - React 原生私有部署
- azure - Azure 函数 host.json:maxPollingInterval
- python - 在 Django 中排序过滤的查询集计数
- java - 如何从输入中获取 2 个字母(忽略白色字符并且不能使用数组)
- javascript - 从链表中删除奇数/偶数
- android - 获取 E/AndroidRuntime: FATAL EXCEPTION: 主要错误,我正在尝试解析 json 文件,但它抛出错误