我有一个模拟汽车结构的java程序。我写了一个解释,但这很难理解而且不是很有用,所以我只会问“抽象”的问题。
我有一个无限循环,它调用方法“现在”,告诉结构建造一辆新车。
while(true){
try{
Thread.sleep(500);
}catch (Exception e) {;}
fabric.now();
}
织物内部有3个区域;第0阶段,汽车的车身被创建,第1阶段,汽车有灯,第2阶段,我在上面放了一个保险杠,完成了所有成品车放置的地方。
当第一次调用menthod now
时,它会在第0阶段创建汽车车身。然后,当它第二次被调用时,它会将第一个车身移动到第1阶段,它放置汽车的灯光(通过画两个圆圈),它创造了一个新的身体。它继续这样,直到汽车准备好,这是它被移动到完成区域。
这是我的问题。我第二次调用now方法,它做了3件事:
我。它在1级中描绘了车身 II。它在0阶段描绘了一个新的车身 III。它在一个舞台上描绘了车身上的灯光。
我想推迟步骤(iii),以便人们可以看到汽车正在提供灯光。如果我使用等待thread.sleep
,或者进行一个需要x毫秒的循环,它会延迟整个结构。
我认为我需要的是将(iii)步骤从正常流程中取出并单独进行,因此当我在绘制灯光之前等待350毫秒时,它不会延迟制造过程的其余部分。 (其余的绘画)。
有什么想法吗?
答案 0 :(得分:3)
以下是我对您的问题的假设: 你想以500ms的常规间隔调用now()方法。现在不管你想在now()中延迟子任务3。这也意味着子任务3的延迟不应该每隔500毫秒延迟调用now()
如果这是您的要求,我建议您使用java.util.Timer.scheduleAtFixedRate
只需创建一个TimerTask并将now()调用包装在其中。
在子任务3中使用wait(500)或你想要多少。
答案 1 :(得分:0)
这有点复杂,但应该很好地扩展。
您可以通过制作更多活动(即启动或拆除活动)来延长
interface QueueEvent{
void perform(EventQueue q);
}
class Stage0CarEvent implements QueueEvent{
public void perform(EventQueue q){
fabric.drawStage0Car();
q.push(new Stage1CarEvent(),500);
}
}
class Stage1CarEvent implements QueueEvent{
public void perform(EventQueue q){
fabric.drawStage1Car();
q.push(new AddLightsEvent(),350);
q.push(new Stage2CarEvent(),500);
}
}
// other events...
class EventQueue{
void run(){
while(true){
// get the next event
// wait an amount of time needed for the next event
event.perform(this);
}
}
void push(QueueEvent event,int t){
//insert the next event t time units from now
}
}