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