我需要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;
}
}
答案 0 :(得分:0)
您的 run 方法存在多个问题:
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();
}
}