首页 \ 问答 \ 为什么我的DelayQueue不会以错误的顺序延迟和打印?(Why is my DelayQueue not delaying and printing in the wrong order?)

为什么我的DelayQueue不会以错误的顺序延迟和打印?(Why is my DelayQueue not delaying and printing in the wrong order?)

我有以下假设的一个简单的DelayQueue演示。

class DelayedThing implements Delayed {

    private final long waitUntil;
    private final String name;

    public DelayedThing(String name, long wait) {
        this.name = name;
        this.waitUntil = System.currentTimeMillis() + wait;
        System.out.println("DelayedThing(" + name + " wait=" + wait + " until-" + waitUntil);
    }

    @Override
    public long getDelay(TimeUnit unit) {
        System.out.println(name + " getDelay = " + unit.convert(waitUntil - System.currentTimeMillis(), TimeUnit.MILLISECONDS));
        return unit.convert(waitUntil - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
    }

    @Override
    public int compareTo(Delayed o) {
        long diff = this.getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS);
        System.out.println(name + ".compareTo(" + o + ") = " + diff);
        return Long.signum(diff);
    }

    @Override
    public String toString() {
        return name;
    }
}

public void test() throws InterruptedException {
    BlockingQueue<Delayed> queue = new DelayQueue<>();
    queue.add(new DelayedThing("one second", 1000));
    queue.add(new DelayedThing("two seconds", 2000));
    queue.add(new DelayedThing("half second", 500));
    for (Delayed d : queue) {
        System.out.println(d);
    }
}

但它打印出来

half second
two seconds
one second

这显然是错的。


I have the following supposedly trivially simple demo of a DelayQueue.

class DelayedThing implements Delayed {

    private final long waitUntil;
    private final String name;

    public DelayedThing(String name, long wait) {
        this.name = name;
        this.waitUntil = System.currentTimeMillis() + wait;
        System.out.println("DelayedThing(" + name + " wait=" + wait + " until-" + waitUntil);
    }

    @Override
    public long getDelay(TimeUnit unit) {
        System.out.println(name + " getDelay = " + unit.convert(waitUntil - System.currentTimeMillis(), TimeUnit.MILLISECONDS));
        return unit.convert(waitUntil - System.currentTimeMillis(), TimeUnit.MILLISECONDS);
    }

    @Override
    public int compareTo(Delayed o) {
        long diff = this.getDelay(TimeUnit.MILLISECONDS) - o.getDelay(TimeUnit.MILLISECONDS);
        System.out.println(name + ".compareTo(" + o + ") = " + diff);
        return Long.signum(diff);
    }

    @Override
    public String toString() {
        return name;
    }
}

public void test() throws InterruptedException {
    BlockingQueue<Delayed> queue = new DelayQueue<>();
    queue.add(new DelayedThing("one second", 1000));
    queue.add(new DelayedThing("two seconds", 2000));
    queue.add(new DelayedThing("half second", 500));
    for (Delayed d : queue) {
        System.out.println(d);
    }
}

but it prints

half second
two seconds
one second

which is obviously wrong.


原文:https://stackoverflow.com/questions/32206562
更新时间:2023-04-06 13:04

最满意答案

您似乎正在针对所有具有相关数量的产品生成所有人的报告; 在大型数据集上,这可能需要一段时间,因为除了数量之外,您没有专门为产品加入产品:

SELECT
p.id,
p.name,
p.gender,
f.name,
IFNULL(l.quantity,0) AS quantity

FROM person_table AS p

JOIN product_table AS f

LEFT JOIN person_product AS l
    ON l.person_id = p.id
    AND l.product_id = f.id

ORDER BY p.id, f.name

结果如下:

在此处输入图像描述

这或多或少是你追求的吗?


It seems that you're generating a report of all people, against all products with the relevant quantity; on a large data set this could take a while as you're not specifically joining product to person for anything other than quantity:

SELECT
p.id,
p.name,
p.gender,
f.name,
IFNULL(l.quantity,0) AS quantity

FROM person_table AS p

JOIN product_table AS f

LEFT JOIN person_product AS l
    ON l.person_id = p.id
    AND l.product_id = f.id

ORDER BY p.id, f.name

Which results in:

enter image description here

Is that more-or-less what you're after?

相关问答

更多

相关文章

更多

最新问答

更多
  • 获取MVC 4使用的DisplayMode后缀(Get the DisplayMode Suffix being used by MVC 4)
  • 如何通过引用返回对象?(How is returning an object by reference possible?)
  • 矩阵如何存储在内存中?(How are matrices stored in memory?)
  • 每个请求的Java新会话?(Java New Session For Each Request?)
  • css:浮动div中重叠的标题h1(css: overlapping headlines h1 in floated divs)
  • 无论图像如何,Caffe预测同一类(Caffe predicts same class regardless of image)
  • xcode语法颜色编码解释?(xcode syntax color coding explained?)
  • 在Access 2010 Runtime中使用Office 2000校对工具(Use Office 2000 proofing tools in Access 2010 Runtime)
  • 从单独的Web主机将图像传输到服务器上(Getting images onto server from separate web host)
  • 从旧版本复制文件并保留它们(旧/新版本)(Copy a file from old revision and keep both of them (old / new revision))
  • 西安哪有PLC可控制编程的培训
  • 在Entity Framework中选择基类(Select base class in Entity Framework)
  • 在Android中出现错误“数据集和渲染器应该不为null,并且应该具有相同数量的系列”(Error “Dataset and renderer should be not null and should have the same number of series” in Android)
  • 电脑二级VF有什么用
  • Datamapper Ruby如何添加Hook方法(Datamapper Ruby How to add Hook Method)
  • 金华英语角.
  • 手机软件如何制作
  • 用于Android webview中图像保存的上下文菜单(Context Menu for Image Saving in an Android webview)
  • 注意:未定义的偏移量:PHP(Notice: Undefined offset: PHP)
  • 如何读R中的大数据集[复制](How to read large dataset in R [duplicate])
  • Unity 5 Heighmap与地形宽度/地形长度的分辨率关系?(Unity 5 Heighmap Resolution relationship to terrain width / terrain length?)
  • 如何通知PipedOutputStream线程写入最后一个字节的PipedInputStream线程?(How to notify PipedInputStream thread that PipedOutputStream thread has written last byte?)
  • python的访问器方法有哪些
  • DeviceNetworkInformation:哪个是哪个?(DeviceNetworkInformation: Which is which?)
  • 在Ruby中对组合进行排序(Sorting a combination in Ruby)
  • 网站开发的流程?
  • 使用Zend Framework 2中的JOIN sql检索数据(Retrieve data using JOIN sql in Zend Framework 2)
  • 条带格式类型格式模式编号无法正常工作(Stripes format type format pattern number not working properly)
  • 透明度错误IE11(Transparency bug IE11)
  • linux的基本操作命令。。。