与 java 中的延迟接口关联的 getDelay(TimeUnit)
getDelay(TimeUnit) associated with Delayed interface in java
要使用 DelayQueue,我们需要为 getDelay(TimeUnit unit)
和 compareTo()
方法实现 Delayed 接口,根据我的理解,将在参数 TimeUnit 枚举不固定的情况下调用 getDelay 方法,它可能是 TimeUnit.MICROSECONDS
、TimeUnit.NANOSECONDS
、TimeUnit.SECONDS
等。例如,如果使用 unit.convert(long,TimeUnit.MICROSECONDS)
,我们要求将 MICROSECONDS 格式的 long 变量转换为一个由 getDelay 的调用者指定。
我在下面的实现中使用了 unit.name()
但每次我只看到它打印 TimeUnit.NANOSECONDS
为什么它只打印 NANOSECONDS。它可以是任何东西。我一直在测试代码以查看差异近 7 个小时。谁能解释这种行为?
public long getDelay(TimeUnit unit){
System.out.println("i'm calling "+unit.name()); // Always TimeUnit.NANOSECONDS
long diff=millis-System.currentTimeMillis();
return unit.convert(diff,TimeUnit.MILLISECONDS); // Asking to convert to the one specified by the caller
}
一般来说,该接口可能就是这种情况,但似乎 class DelayQueue
只调用过 getDelay(TimeUnit.NANOSECONDS)
.
Class DelayQueue
表示
Expiration occurs when an element's getDelay(TimeUnit.NANOSECONDS)
method returns a value less than or equal to zero.
所以它只会用 TimeUnit.NANOSECONDS
.
调用是有道理的
其他 classes 可以使用其他参数调用该方法。其他版本的 DelayQueue 也可能使用其他参数调用该方法,但您可以验证 this openjdk8 implementation 不会。
要使用 DelayQueue,我们需要为 getDelay(TimeUnit unit)
和 compareTo()
方法实现 Delayed 接口,根据我的理解,将在参数 TimeUnit 枚举不固定的情况下调用 getDelay 方法,它可能是 TimeUnit.MICROSECONDS
、TimeUnit.NANOSECONDS
、TimeUnit.SECONDS
等。例如,如果使用 unit.convert(long,TimeUnit.MICROSECONDS)
,我们要求将 MICROSECONDS 格式的 long 变量转换为一个由 getDelay 的调用者指定。
我在下面的实现中使用了 unit.name()
但每次我只看到它打印 TimeUnit.NANOSECONDS
为什么它只打印 NANOSECONDS。它可以是任何东西。我一直在测试代码以查看差异近 7 个小时。谁能解释这种行为?
public long getDelay(TimeUnit unit){
System.out.println("i'm calling "+unit.name()); // Always TimeUnit.NANOSECONDS
long diff=millis-System.currentTimeMillis();
return unit.convert(diff,TimeUnit.MILLISECONDS); // Asking to convert to the one specified by the caller
}
一般来说,该接口可能就是这种情况,但似乎 class DelayQueue
只调用过 getDelay(TimeUnit.NANOSECONDS)
.
Class DelayQueue
表示
Expiration occurs when an element's getDelay(TimeUnit.NANOSECONDS) method returns a value less than or equal to zero.
所以它只会用 TimeUnit.NANOSECONDS
.
其他 classes 可以使用其他参数调用该方法。其他版本的 DelayQueue 也可能使用其他参数调用该方法,但您可以验证 this openjdk8 implementation 不会。