延迟队列的Java实现

延迟队列的Java实现,java,multithreading,concurrency,Java,Multithreading,Concurrency,我是理解线程和并发包的初学者。了解要使用java.util.concurrent.DelayedQueue我们必须实现java.util.concurrent.Delayed接口 它有一个抽象方法getDelay() 返回给定时间单位内与此对象关联的剩余延迟 @Override public long getDelay(TimeUnit unit) { long diff = startTime - System.currentTimeMillis(); // long variabl

我是理解线程和并发包的初学者。了解要使用
java.util.concurrent.DelayedQueue
我们必须实现
java.util.concurrent.Delayed
接口 它有一个抽象方法getDelay()

返回给定时间单位内与此对象关联的剩余延迟

@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

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

unit.convert(diff, TimeUnit.MILLISECONDS);
相反,我也可以不使用convert方法直接返回diff


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

因此,
unit.convert(diff,TimeUnit.millizes)
diff
转换为
unit
,以
TimeUnit.millizes
表示

TimeUnit.毫秒
指的是
diff
是什么<代码>差异然后从
时间单位.毫秒
转换为
单位

请注意,还必须实现
Comparable
compareTo()
,它将
延迟
扩展



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

您正在从毫秒转换,而不是从毫秒转换。谢谢您的回答。当差异转换为单位时。你能解释一下这个单位到底指的是什么吗?这里的convert方法是将diff(以毫秒为单位的长)转换为(以单位为单位的长)毫秒和单位之间的区别是什么here@Rakesh
unit
是方法参数。它的类型为
TimeUnit
,是一个枚举。查看它以查看所有可能的值(毫秒、秒、分钟等)。
unit.convert(diff, TimeUnit.MILLISECONDS);