Кто прошел подскажите.
Не проходит валидацию пункт
3. В методе startCookingOrder должен быть вызван метод Thread.sleep() в параметром равным десятикратному времени приготовлению заказа.
Вроде бы простое требование, но валидатор явно проверяет еще что-то.
OrderManager:
package com.javarush.task.task27.task2712;
import com.javarush.task.task27.task2712.kitchen.Cook;
import com.javarush.task.task27.task2712.kitchen.Order;
import com.javarush.task.task27.task2712.statistic.StatisticManager;
import java.util.Iterator;
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<>();
public OrderManager() {
Thread thread = new Thread(new Runnable() {
@Override
public void run() {
Set<Cook> cooks = StatisticManager.getInstance().getCooks();
while (true) {
try {
Thread.sleep(10);
}
catch (InterruptedException e) {}
if (!orderQueue.isEmpty()) {
for (Cook cook : cooks) {
if (!cook.isBusy()) {
Order order = orderQueue.poll();
if (order != null)
cook.startCookingOrder(order);
}
if (orderQueue.isEmpty())
break;
}
}
}
}
});
thread.setDaemon(true);
thread.start();
}
@Override
public void update(Observable o, Object arg) {
try {
orderQueue.put((Order) arg);
}
catch (InterruptedException e) {}
}
}
Cook:
package com.javarush.task.task27.task2712.kitchen;
import com.javarush.task.task27.task2712.ConsoleHelper;
import com.javarush.task.task27.task2712.statistic.StatisticManager;
import com.javarush.task.task27.task2712.statistic.event.CookedOrderEventDataRow;
import java.util.Observable;
import java.util.Observer;
public class Cook extends Observable {
private String name;
private boolean busy;
public boolean isBusy() {return busy;}
public Cook(String name) {this.name = name;}
@Override
public String toString() {return name;}
public void startCookingOrder(Order order) {
this.busy = true;
int orderTime = order.getTotalCookingTime();
ConsoleHelper.writeMessage("Start cooking - " + order + ", cooking time " + orderTime + "min");
CookedOrderEventDataRow eventDataRow = new CookedOrderEventDataRow(order.getTablet().toString(), name, orderTime * 60, order.getDishes());
StatisticManager.getInstance().register(eventDataRow);
setChanged();
notifyObservers(order);
try {
Thread.sleep(orderTime * 10);
} catch (InterruptedException e) {
}
this.busy = false;
}
}