我有一个包含时隙的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()来完成这个任务?
暂无答案!
目前还没有任何答案,快来回答吧!