Я пытаюсь смоделировать банковскую услугу.До сих пор я могу случайным образом генерировать клиентов со случайным временем, и кассиры будут обслуживать их, если они не заняты.Моя проблема возникает, когда симуляция должна закончиться ... это не так.Клиенты перестают генерироваться, но кассир продолжает ждать клиентов.Я пробовал разные подходы, но не получилось.Это код перед попыткой решения.
Это CustomerGenerator:
@Override
public void run() {
while (currentTime != openTime) {
double accept = Math.random();
if (accept >= 0.6) {
addCustomerToQueue();
System.out.println("Customer in line.");
} else {
System.out.println("Waiting for a customer.");
}
try {
currentTime += 1000;
Thread.sleep(1000);
} catch (Exception e) {
e.printStackTrace();
}
}
}
private synchronized void addCustomerToQueue() {
Customer customer = new Customer(placeInLine + 1);
this.customerLinkedList.add(customer);
placeInLine++;
notify();
}
synchronized Customer getNextCustomer() throws InterruptedException {
notify();
while (customerLinkedList.size() == 0) {
wait();
}
return customerLinkedList.poll();
}
Это Касса:
@Override
public void run() {
try {
while (true) {
Customer customer = generator.getNextCustomer();
int customerServingNumber = customer.getServingNumber();
double customerServingTime = customer.getServingTime();
System.out.println(cashierName + " serving " + customerServingNumber + " for " + getServingTime(customerServingTime));
Thread.sleep(customerServingNumber * 1000);
}
} catch (InterruptedException e) {
e.printStackTrace();
}
}