Java 我如何等待而不睡线?
我有一个包含时隙的Epoch类。我只被允许在我的时间段内构建一个“东西”(简化)。下面是一个例子: 所以在这个方法中,我要么返回“thing”,要么等到它是我的插槽。如果我的吃角子老虎时间已经过去了,我想等到下一个纪元再去吃角子老虎。我当前的解决方案使用thread.sleep()。像这样:Java 我如何等待而不睡线?,java,thread-sleep,Java,Thread Sleep,我有一个包含时隙的Epoch类。我只被允许在我的时间段内构建一个“东西”(简化)。下面是一个例子: 所以在这个方法中,我要么返回“thing”,要么等到它是我的插槽。如果我的吃角子老虎时间已经过去了,我想等到下一个纪元再去吃角子老虎。我当前的解决方案使用thread.sleep()。像这样: public Thing generateThing() { while (true) { var now = getTimeStamp(); var act
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,作为一个时隙甚至一个纪元完成不需要更长的时间吗?我认为如果您需要任何有用的帮助,您需要更好地描述您希望通过您的纪元和时间段实现什么,以及如何使用它。