从多个BlockingQueue消费

时间:2018-08-15 17:51:17

标签: java blockingqueue

我正在尝试实现包含Elevator类的Elevator系统,该类接收来自ElevatorController的请求并相应地移动。 ElevatorController维护2个阻塞队列,一个阻塞队列用于上行请求,另一个阻塞队列。

我希望电梯同时查看两个队列并在其中一个队列中出现任何请求时进行服务。

如果我使用upwardQueue.take(),电梯将等待一些请求将其显示为upperupQueue。但是同时,如果一个请求出现在DowndownQueue中,电梯如何使用它?

基本上,电梯如何使用两个队列中的请求?

1 个答案:

答案 0 :(得分:0)

理想的解决方案是为请求创建一个类。

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个元素的单个 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;
  }
}