使用延迟队列需要实现Delayed接口
重要的是此接口方法
@Override
public long getDelay(TimeUnit unit) {
System.err.println(num++);
return unit.convert(fireTime - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
}
如果 return convert 里使用纳秒 延迟队列延迟两秒钟取出 getDelay 会被执行9万多次 而使用毫秒只会被执行两次
而网上的一些demo 写的都是纳秒,但我们实际用的时候 不会用到这么精确 就会导致getDelay 被执行多次