有 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包含毫秒差,并在下面的屏幕截图控制台中打印。尝试使用时间单位的转换方法,并在下面的控制台中打印,它们完全相同,并且是长数据类型。当这两个值都是相同的长数据类型时,为什么我需要使用这个额外的数据行

unit.convert(diff, TimeUnit.MILLISECONDS);

相反,我也可以不使用convert方法直接返回diff

Console screenshot


共 (1) 个答案

  1. # 1 楼答案

    unitgetDelay()的调用者提供。实现必须以unit指定的时间单位返回延迟

    因此,unit.convert(diff, TimeUnit.MILLISECONDS)diff转化为unit,表达在TimeUnit.MILLISECONDS

    TimeUnit.MILLISECONDS指的是diff是什么diff然后从TimeUnit.MILLISECONDS转换为unit

    请注意,您还必须实现ComparablecompareTo(),它是Delayed扩展的


    unit参数不是固定的。它由方法的调用者提供,因此可能会有所不同。它可以是TimeUnit.MILLISECONDSTimeUnit.SECONDS或任何其他枚举值。这就是为什么需要使用convert方法