多线程延迟队列的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包含毫秒差,并在下面的屏幕截图控制台中打印。尝试使用时间单位的转换方法,并在下面的控制台中打印,它们完全相同,并且是长数据类型。当这两个值都是相同的长数据类型时,为什么我需要使用这个额外的数据行
unit.convert(diff, TimeUnit.MILLISECONDS);
相反,我也可以不使用convert方法直接返回diff
# 1 楼答案
unit
由getDelay()
的调用者提供。实现必须以unit
指定的时间单位返回延迟因此,
unit.convert(diff, TimeUnit.MILLISECONDS)
将diff
转化为unit
,表达在TimeUnit.MILLISECONDS
中TimeUnit.MILLISECONDS
指的是diff
是什么diff
然后从TimeUnit.MILLISECONDS
转换为unit
请注意,您还必须实现
Comparable
的compareTo()
,它是Delayed
扩展的unit
参数不是固定的。它由方法的调用者提供,因此可能会有所不同。它可以是TimeUnit.MILLISECONDS
或TimeUnit.SECONDS
或任何其他枚举值。这就是为什么需要使用convert
方法