我试图实现电梯系统,其中包含电梯类,接受来自ElevatorController的请求,并相应地移动。ElevatorController维护两个阻塞队列,一个用于向上请求,另一个用于向下请求。
我希望电梯查看这两个队列,并在其中一个队列中出现任何请求时提供服务。
如果我使用upwardQueue.take(),电梯将等待一些请求出现它的upwardQueue。但是同时,如果一个请求出现在downwardQueue中,电梯如何使用它呢?
基本上,电梯如何处理来自两个队列的请求?
发布于 2018-08-15 18:47:28
理想的解决方案是专门为请求创建一个类。
public class FloorRequest {
private final int floor;
private final Direction direction;
public FloorRequest(int floor, Direction direction) {
this.floor = floor;
this.direction = direction;
}
public int getFloor() { return floor; }
public Direction getDirection() { return direction; }
public enum Direction {
UP, DOWN
}
}然后使用单个BlockingQueue of FloorRequest元素。
BlockingQueue<FloorRequest> queue = ...;
while (/* some condition */) {
FloorRequest request = queue.take();
switch (request.getDirection()) {
case UP:
// do something
break;
case DOWN:
// do something else
break;
}
}https://stackoverflow.com/questions/51863916
复制相似问题