📄 eventstream.java
字号:
package test1;
public class EventStream implements Runnable{
private int typenum=6;
private double []percentage=new double[typenum];
private double []averageInterval=new double[typenum]; //平均的延时,以毫秒为单位
private int eventnum;
private EventReceiver eventReceiver;
public EventStream(EventReceiver eventReceiver)
{
this.eventReceiver=eventReceiver;
}
public void produce()
{
char type;
while(eventnum!=0)
{
long tic =System.nanoTime()/1000000;
double p=Math.random();
//System.out.println(p);
if(p<percentage[0])
{
type='A';
}else{
if(p<percentage[1]+percentage[0])
{
type='B';
}else{
if(p<percentage[2]+percentage[1]+percentage[0])
{
type='C';
}else{
if(p<1-percentage[1]-percentage[0])
{
type='D';
}else{
if(p<1-percentage[0])
{
type='E';
}else{
type='F';
}
}
}
}
}
long t =System.nanoTime()/1000000;
P_Event pe=new P_Event(0,t,type);
eventReceiver.acceptEvent(pe);
//System.out.println("~~~~~~~~~~~~~~~~~~~~");
//System.out.println("新到来的事件e:id="+pe.getid()+" t="+pe.gettimestamp()+" type="+pe.gettype());
//System.out.println("~~~~~~~~~~~~~~~~~~~~");
eventnum--;
long toc =System.nanoTime()/1000000;
// 等一段时间
double waitingTime = MyRandom.exponent(averageInterval[type-'A']);
sleep(waitingTime-toc+tic);
}
/*long t =0;
double waitingTime=0;
char type;
while(eventnum!=0)
{
double p=Math.random();
//System.out.println(p);
if(p<percentage[0])
{
type='A';
}else{
if(p<percentage[1]+percentage[0])
{
type='B';
}else{
if(p<percentage[2]+percentage[1]+percentage[0])
{
type='C';
}else{
if(p<1-percentage[1]-percentage[0])
{
type='D';
}else{
if(p<1-percentage[0])
{
type='E';
}else{
type='F';
}
}
}
}
}
//System.nanoTime()/1000000;
t=(long) (t+waitingTime);
P_Event pe=new P_Event(0,t,type);
eventReceiver.acceptEvent(pe);
//System.out.println("~~~~~~~~~~~~~~~~~~~~");
//System.out.println("新到来的事件e:id="+pe.getid()+" t="+pe.gettimestamp()+" type="+pe.gettype());
//System.out.println("~~~~~~~~~~~~~~~~~~~~");
eventnum--;
//
waitingTime = MyRandom.exponent(averageInterval[type-'A']);
// 等一段时间
//sleep(waitingTime-toc+tic);
}*/
}
public static void sleep(double milliTime)
{
if (milliTime<=0) return;
long milli = (long)milliTime;
int nano = (int)((milliTime-(long)milliTime) * 1000000);
try
{
Thread.sleep(milli,nano);
}
catch (InterruptedException e)
{
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public void run()
{
produce();
}
public double[] getPercentage() {
return percentage;
}
public void setPercentage(int i,double percentage) {
this.percentage[i] = percentage;
}
public void setEventnum(int eventnum) {
this.eventnum = eventnum;
}
public void setAverageInterval(int i,double averageInterval) {
this.averageInterval[i] = averageInterval;
}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -