【发布时间】:2017-05-31 09:37:02
【问题描述】:
我正在Java中进行离散事件模拟,时间相关的代码如下;
class Event implements Runnable, Comparable {
double time;
Runnable runnable;
Event(double time, Runnable aRunnable) {
this.time = time;
runnable = aRunnable;
}
public boolean lessThan(Comparable y) {
Event e = (Event) y; // Will throw an exception if y is not an Event
return this.time <= e.time;
}
@Override
public void run() {
runnable.run();
}
}
class Simulator extends AbstractSimulator {
static Random rnd;
static double time;
double endTime;
static double now() {
return time;
}
Simulator(long seed, double simDuration) {
time = 0.0;
events = new ListQueue();
rnd = new Random(seed);
endTime = simDuration;
}
void doAllEvents() {
Event e;
while ((e = (Event) events.removeFirst()) != null && time < endTime) {
if(time > e.time)
System.out.printf("Something is worng! time=%f eventtime=%f",time,e.time);
time = e.time;
e.run();
System.out.printf("\n Time = %f", time);
}
}
我根据事件失败时间考虑结果,但我需要在绘制它时使用一个单位。
Java 使用哪个单位进行模拟时间?还是我可以将它们视为第二个?或者是否有任何计算可以将其转换为现实世界时间?
提前致谢,
最好的问候,
更新:
感谢您的回答,我试图测量确切的时间,但我在这里遇到了问题。现有的虚拟仿真时间正在测量网络寿命。并且它与示例的确切时间不同;当我为 75 台设备运行模拟时,netorklifetime 更短,比如说 70.0,但实际时间超过 35 台设备,寿命为 1500.0。发生这种情况是因为每个设备的事件都在重复。
我需要在这里找到虚拟模拟时间的单位。
再次感谢...
【问题讨论】:
-
注意:实现
Comparable<Event>,而不是原始Comparable。 -
我会使用 System.nanoTime() (long) 和 TimeUnit 类来展示它们。 nanoTime() 只是用来测量经过的时间