📄 agent.java
字号:
/*
* 创建日期 2005-2-26
*
* TODO 要更改此生成的文件的模板,请转至 窗口 - 首选项 - Java - 代码样式 - 代码模板
*/
package simulator;
import java.util.Date;
public class Agent extends Thread {
private boolean running = false; //线程执行的控制变量,为假时停止线程
/**
*
* @uml.property name="business"
* @uml.associationEnd multiplicity="(1 1)" inverse="agent:simulator.Business"
*/
private Business business = null; //该代理服务的Business
private int ID = -1; //该代理的ID
/**
*
* @uml.property name="numCustomers"
*/
private int numCustomers = 0; //该代理服务的顾客数目
public Agent(Business _business, int _ID) {
business = _business; //_ID这个代理服务于_business 企业
ID = _ID;
}
public void start() {
running = true;
super.start(); //启动线程
}
public void halt() {
running = false; //中止线程
}
/**
*
* @uml.property name="numCustomers"
*/
public int getHandled() {
return numCustomers; //返回已服务的顾客数
}
private void releaseCustomer(Customer customer)
//释放一个顾客,即该顾客已服务完毕
{
numCustomers++; //已服务的顾客数增加1
//计算顾客的等待时间,总的等待时间
business.checkoutCustomer(customer.getWaitTime(new Date()));
//先调用customer的getWaitTime方法计算该顾客等待了多少时间
//如何调用business的checkoutCustomer方法累计business的服务的
//顾客数,并累计总的等待时间
}
public void run() //线程的主体
{
while (running) {
try {
sleep((int) (Math.random() * Simulator.MAX_TELLER_BREAK) + 1000);
//休眠一段时间,这段时间是在一个服务代理所需要的最大服务
//时间之内,其基本时间为一秒
Customer customer = business.requestCustomerFor(ID);
//从第ID顾客队列中取出一个顾客
//也可能是直接从某个顾客队列中取出一个顾客
if (customer != null) //取出一个顾客
{
sleep(customer.getDelayTime()); //休眠,模拟顾客购物或其他事情要
//耽误的时间
releaseCustomer(customer);
//释放一个顾客,即该顾客已服务完毕
}
} catch (InterruptedException ie) {
System.out.println("Teller exception: " + ie);
}
}
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -