如何等待而不休眠线程?

gojuced7  于 2021-07-09  发布在  Java
关注(0)|答案(0)|浏览(273)

我有一个包含时隙的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()来完成这个任务?

暂无答案!

目前还没有任何答案,快来回答吧!

相关问题