Java 我如何等待而不睡线?

Java 我如何等待而不睡线?,java,thread-sleep,Java,Thread Sleep,我有一个包含时隙的Epoch类。我只被允许在我的时间段内构建一个“东西”(简化)。下面是一个例子: 所以在这个方法中,我要么返回“thing”,要么等到它是我的插槽。如果我的吃角子老虎时间已经过去了,我想等到下一个纪元再去吃角子老虎。我当前的解决方案使用thread.sleep()。像这样: public Thing generateThing() { while (true) { var now = getTimeStamp(); var act

我有一个包含时隙的Epoch类。我只被允许在我的时间段内构建一个“东西”(简化)。下面是一个例子:

所以在这个方法中,我要么返回“thing”,要么等到它是我的插槽。如果我的吃角子老虎时间已经过去了,我想等到下一个纪元再去吃角子老虎。我当前的解决方案使用thread.sleep()。像这样:

   public Thing generateThing() {
    while (true) {
        var now = getTimeStamp();
        var activeSlot = epoch.getActiveSlot(now);

        if (!activeSlot.isPresent()) {
            this.epoch = buildEpoch();
            epoch.awaitMySlot(now, myaddress); //see wait below
            continue;
        }

        if (!CanIGenerateThing()) {
            epoch.awaitMySlot(now, myaddress); //see wait below
            continue;
        } else {
            return buildThing();
        }
    }
}
这就是等待逻辑:

public void awaitMySlot(long now, Address self) {
    var mySlot = getMySlot(now, self);
    try {
        if (mySlot.isPresent()) {
            //wait until end of slot
            var difference = (mySlot.get().getStart() - now);
            Thread.sleep(difference);
        } else {
            //wait until end of epoch
            var difference = endTimeStamp - now;
            Thread.sleep(difference);
        }
    } catch (InterruptedException ex) {
        ex.printStackTrace();
    }
}
如果我理解正确,那么thread.sleep()会浪费资源,但我只需要等待,我不需要浪费资源。我还认为睡眠不是很精确


没有thread.sleep(),有没有更好的方法来实现这一点?

对我来说,这听起来像是一个经典的调度问题。您是否签出了ScheduledThreadPoolExecutor()?“thread.sleep()浪费资源”这不是真的。我投票结束这个问题,因为您的问题的前提是错误的:“thread.sleep()浪费资源”。您打算实现它是单线程还是多线程?您希望如何控制任何构建
buildThing()
Dos,作为一个时隙甚至一个纪元完成不需要更长的时间吗?我认为如果您需要任何有用的帮助,您需要更好地描述您希望通过您的纪元和时间段实现什么,以及如何使用它。