【发布时间】:2013-12-25 09:55:27
【问题描述】:
所以我有这个循环
public void run()
{
while(true)
{
//Look at everything on queue currently and pulls them into a list
List<ElevatorCall> callsWaiting = new ArrayList<ElevatorCall>();
queue.drainTo(callsWaiting);
ElevatorCall nextDestination = getBestOption(callsWaiting);
System.out.println("Picked Person(" + nextDestination.getPerson().getId() + ") as best option");
//Work on this section
if(nextDestination != null)
{
sortCallsByShortestDistanceAndDirection(workQueue, nextDestination.getDirection());
boolean arrived = moveTowards(nextDestination);
while(!arrived)
{
//Check for new calls
List<ElevatorCall> newCalls = new ArrayList<ElevatorCall>();
queue.drainTo(newCalls);
checkFloorForCallsAndAddToElevator(workQueue);
sortCallsByShortestDistanceAndDirection(newCalls, nextDestination.getDirection());
arrived = moveTowards(nextDestination);
}
arrived = false;
}
}
}
我希望它继续四处走动并找到目标楼层。但是,当它找到第一个目标楼层时,循环结束,因为当它回到顶部时, queue.drainTo(callsWaiting) 不起作用,因为队列已经被清空。我想在我设置为 false 后我需要重新填充它,但是我不知道该怎么做。 感谢您对此的任何帮助。
【问题讨论】:
标签: java multithreading concurrency queue fill