执行阶段 运行 持续 2 分钟,在此期间客户将在 2 - 6 秒之间随机到达并被放入队列
The execution phase run for 2 minutes during which time customers will arrive randomly between 2 - 6 seconds and be placed into a queue
我设法让顾客随机出现,我现在唯一的问题是将整个事情包装在一个 2 分钟的计时器中,而不会与顾客到达发生冲突。
static Timer timer = new Timer();
static class Task extends TimerTask {
@Override
public void run() {
int delay = (new Random().nextInt(5)+2) * 1000;
timer.schedule(new Task(), delay);
System.out.println("Hi " + delay);
}
}
public static void main(String args[]) {
new Task().run();
}
这就是我目前使用的方法。我试过将它包装在另一个 TimerTask
中,并使用 System.nanoTime()
和一个 while 循环。他们最终都与客户的到来发生冲突。我通常喜欢自己解决问题,但我已经在这一部分上工作了几个小时,我还是想不通。
为什么不使用带有 do-while
循环的睡眠,例如:
long durationMillis = TimeUnit.MINUTES.toMillis(2);
long endTime = System.currentTimeMillis() + durationMillis;
do {
int delaySec = ThreadLocalRandom.current().nextInt(2, 7);
TimeUnit.SECONDS.sleep(delaySec);
System.out.println("Hi " + delaySec);
} while (System.currentTimeMillis() < endTime);
如果您不需要等待整秒或 6 秒等待不包括在内,请更改 delaySec
语义。
我设法让顾客随机出现,我现在唯一的问题是将整个事情包装在一个 2 分钟的计时器中,而不会与顾客到达发生冲突。
static Timer timer = new Timer();
static class Task extends TimerTask {
@Override
public void run() {
int delay = (new Random().nextInt(5)+2) * 1000;
timer.schedule(new Task(), delay);
System.out.println("Hi " + delay);
}
}
public static void main(String args[]) {
new Task().run();
}
这就是我目前使用的方法。我试过将它包装在另一个 TimerTask
中,并使用 System.nanoTime()
和一个 while 循环。他们最终都与客户的到来发生冲突。我通常喜欢自己解决问题,但我已经在这一部分上工作了几个小时,我还是想不通。
为什么不使用带有 do-while
循环的睡眠,例如:
long durationMillis = TimeUnit.MINUTES.toMillis(2);
long endTime = System.currentTimeMillis() + durationMillis;
do {
int delaySec = ThreadLocalRandom.current().nextInt(2, 7);
TimeUnit.SECONDS.sleep(delaySec);
System.out.println("Hi " + delaySec);
} while (System.currentTimeMillis() < endTime);
如果您不需要等待整秒或 6 秒等待不包括在内,请更改 delaySec
语义。