package com.codegym.task.task27.task2712;
import com.codegym.task.task27.task2712.kitchen.Cook;
import com.codegym.task.task27.task2712.kitchen.Order;
import com.codegym.task.task27.task2712.statistics.StatisticsManager;
import java.util.Observable;
import java.util.Observer;
import java.util.Set;
import java.util.concurrent.LinkedBlockingQueue;
public class OrderManager implements Observer {
private LinkedBlockingQueue<Order> orderQueue = new LinkedBlockingQueue(200);
public OrderManager() {
Thread thread = new Thread() {
@Override
public void run() {
Set<Cook> cooks = StatisticsManager.getInstance().getCooks();
try {
while (true) {
Thread.sleep(10);
if (!orderQueue.isEmpty()) {
for (Cook cook : cooks) {
if (!cook.isBusy()) {
cook.startCookingOrder(orderQueue.take());
}
}
}
}
} catch (InterruptedException e) {
}
}
};
thread.setDaemon(true);
thread.start();
}
@Override
public void update(Observable o, Object order){
orderQueue.add((Order) order);
}
}
package com.codegym.task.task27.task2712;
import com.codegym.task.task27.task2712.kitchen.Cook;
import com.codegym.task.task27.task2712.kitchen.Waiter;
import com.codegym.task.task27.task2712.statistics.StatisticsManager;
import java.util.ArrayList;
import java.util.List;
public class Restaurant {
private static final int ORDER_CREATION_INTERVAL = 100;
public static void main(String[] args) {
Cook cook1 = new Cook("Amigo");
Cook cook2 = new Cook("Pietro"); // create second cook
StatisticsManager.getInstance().register(cook1); // register cooks with StatisticsManager
StatisticsManager.getInstance().register(cook2);
Waiter waiter = new Waiter();
List<Tablet> tabletList = new ArrayList<>();
for (int i = 0; i < 5; i++){
tabletList.add(new Tablet(i + 1));
}
Thread menuThread = new Thread(new RandomOrderGeneratorTask(tabletList, ORDER_CREATION_INTERVAL));
menuThread.start();
try {
Thread.sleep(1000);
menuThread.interrupt();
menuThread.join();
Thread.sleep(1000);
} catch (InterruptedException ignored){
}
cook1.addObserver(waiter);
cook2.addObserver(waiter);
ManagerTablet managerTablet = new ManagerTablet();
managerTablet.printAdRevenue();
managerTablet.printCookUtilization();
managerTablet.printActiveVideoSet();
managerTablet.printArchivedVideoSet();
}
}