protected boolean pickAndExecuteAnAction() { synchronized (orders) { for (Order o : orders) { if (o.state == OrderState.UnableToBeSupplied) { TellWaiterWeAreOut(o); return true; } } } synchronized (orders) { for (Order o : orders) { if (o.state == OrderState.NotReady) { o.state = OrderState.BeingPrepared; PrepareOrder(o); return true; } } } synchronized (orders) { for (Order o : orders) { if (o.state == OrderState.Ready) { OrderIsReady(o); return true; } } } synchronized (marketOrders) { for (MarketOrder mo : marketOrders) { if (mo.os == moState.pending) { print("Ordering " + mo.amount + " " + mo.food + "'s"); mo.os = moState.ordered; print("COWABUNGA ordering from market"); goToMarket(restaurant, "Italian", mo.amount, mo.id); return true; } } } // Producer-consumer handling StandOrder orderFromStand = restaurant.revolvingStand.remove(); if (orderFromStand != null) { WaiterAgent standWaiter = orderFromStand.waiter; int standTableNum = orderFromStand.tableNum; String standOrderType = orderFromStand.order; if (menu.menuItems.containsKey(orderFromStand.order) && inventory.get(orderFromStand.order) > 0) { long timeFinish = (System.currentTimeMillis() + (long) ((menu.menuItems.get(standOrderType)) * Constants.SECOND)); Order newStandOrder = new Order(standWaiter, standTableNum, standOrderType, timeFinish); AddNewOrderFromStand(newStandOrder); } return true; } return false; }