我需要4名收银员为所有客户服务,但事实证明每个客户都是由每个现金服务台处理的,这是不正确的,因为我有:
总时间2.5客户#15出纳#2
总时间3.0客户#15出纳#4
总时间2.4客户#15出纳#3
总时间2.0客户#15出纳#1
总时间6.0客户#14出纳#4
总时间4.0客户#14出纳#1
总时间4.8客户#14出纳#3
纠正我所需要的:
总时间2.5客户#15出纳#2
总时间3.0客户#14出纳#4
总时间2.4客户#13出纳#3
如何正确地实现它?
public class CashierThread extends Thread{
private TotalClients totalClients;
private Cashier cashier;
private double totalTime = 0;
public CashierThread(TotalClients totalClients, Cashier cashier) {
this.totalClients = totalClients;
this.cashier = cashier;
}
public synchronized void run() {
int clients = totalClients.getClients();
while (clients > 0){
if(isAlive()) {
double timeCashier = cashier.getAverageTime();
totalTime += timeCashier;
System.out.println("Total time " + totalTime + " client #" + clients + " cashier #" + cashier.getId());
clients--;
totalClients.setClients(clients);
try {
this.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
}
public class TotalClients {
private int clients;
public TotalClients(int clients) {
this.clients = clients;
}
public int getClients() {
return clients;
}
public void setClients(int clients) {
this.clients = clients;
}
}
public class Cashier {
private double averageTime;
private int id;
public Cashier(double averageTime, int id) {
this.averageTime = averageTime;
this.id = id;
}
public double getAverageTime() {
return averageTime;
}
public int getId() {
return id;
}
}发布于 2021-02-21 15:50:29
运行方法有多个问题:
public synchronized void run() {
int clients = totalClients.getClients();
while (clients > 0){
if(isAlive()) {
double timeCashier = cashier.getAverageTime();
totalTime += timeCashier;
System.out.println("Total time " + totalTime + " client #" + clients + " cashier #" + cashier.getId());
try {
this.sleep(1);
} catch (InterruptedException e) {
e.printStackTrace();
}
clients = totalClients.getClients();
}
}
}您的TotalClients类应该如下所示:
public class TotalClients {
private AtomicInteger clients;
public TotalClients() {
this.clients = new AtomicInteger(4);
}
//get and update clients
public int getClients() {
return this.clients.decrementAndGet();
}
}https://stackoverflow.com/questions/66303744
复制相似问题