Java 从多个BlockingQueue消费

Java 从多个BlockingQueue消费,java,blockingqueue,Java,Blockingqueue,我正在尝试实现包含电梯类的电梯系统,该类接收电梯控制器的请求并相应地移动。ElevatorController维护2个阻塞队列,一个用于向上请求,另一个用于向下请求 我想让电梯查看这两个队列,并在其中一个队列中出现任何请求时提供服务 如果我使用upwardQueue.take(),电梯将等待某个请求出现在upwardQueue中。但同时,如果一个请求出现在下行队列中,电梯如何使用它 基本上,电梯如何使用来自两个队列的请求?理想的解决方案是专门为请求创建一个类 public class Floor

我正在尝试实现包含电梯类的电梯系统,该类接收电梯控制器的请求并相应地移动。ElevatorController维护2个阻塞队列,一个用于向上请求,另一个用于向下请求

我想让电梯查看这两个队列,并在其中一个队列中出现任何请求时提供服务

如果我使用
upwardQueue.take()
,电梯将等待某个请求出现在upwardQueue中。但同时,如果一个请求出现在下行队列中,电梯如何使用它


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

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

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
  }

}
然后您将使用
FloorRequest
元素的单个
BlockingQueue

BlockingQueue<FloorRequest> queue = ...;
while (/* some condition */) {
  FloorRequest request = queue.take();
  switch (request.getDirection()) {
    case UP:
      // do something
      break;
    case DOWN:
      // do something else
      break;
  }
}
阻塞队列=。。。;
而(/*某些条件*/){
FloorRequest请求=queue.take();
开关(request.getDirection()){
个案:
//做点什么
打破
按大小写:
//做点别的
打破
}
}

噢,天哪,你是不是被迫使用两个队列?用一个!谢谢你的沙拉。这个解决方案对我有效。然而,我只是想知道是否有机会从2个队列中消费。