Java中是否有适合用作'的类;模拟时钟';在离散事件模拟中?

Java中是否有适合用作'的类;模拟时钟';在离散事件模拟中?,java,events,simulation,clock,Java,Events,Simulation,Clock,本质上,我在寻找一种能够模拟时钟的东西,它可以通过调用一个方法向前递增一个时间单位。在标准Java库中可以找到这样的东西吗?或者您必须自己实现它吗?我不知道标准Java API,但是在运行自己的Java API之前,请先检查一下。标准日历/GregorianCalendar应该可以帮您实现。简单整数怎么样它可以增加一个:counter++ 如果有多个线程,也可以使用java.util.concurent.atomic.AtomicInteger。它甚至提供了一个incrementAndGet()

本质上,我在寻找一种能够模拟时钟的东西,它可以通过调用一个方法向前递增一个时间单位。在标准Java库中可以找到这样的东西吗?或者您必须自己实现它吗?

我不知道标准Java API,但是在运行自己的Java API之前,请先检查一下。

标准日历/GregorianCalendar应该可以帮您实现。

简单整数怎么样它可以增加一个:
counter++


如果有多个线程,也可以使用
java.util.concurent.atomic.AtomicInteger
。它甚至提供了一个
incrementAndGet()
函数。

根据您的使用情况,请查看以下内容:

简单

int counter;  //counter++
long counter; //counter++ (If you expect the time to overflow int)
Mutable(org.apache.commons.lang.Mutable.*):

线程安全:

AtomicInteger counter; //counter.incrementAndGet();
AtomicLong counter;    //counter.incrementAndGet();

看看SimKit。它是一个基于java的开源离散事件引擎。它有很好的文档记录,您可以提取时钟和事件列表,并为自己的目的进行自定义。它得到了很好的支持,因为它用于向研究生教授DES入门课程


如果您要查找的是可以添加时间单位(例如秒)的内容,则可以使用add()方法,并将Calendar.SECOND作为此方法的第一个参数传递。我会尝试在Calendar层次结构中对某些内容进行子类化,或者使用一些简单的整数计数器,并在需要时将其包装到线程中(查看java.util.concurrent.TimeUnit可能会有所帮助)。抱歉,但这是错误的。Barjavel询问离散事件模拟,您的答复描述了时间步模拟。在DES中,时间直接前进到下一个事件的发生,它不会以固定的增量前进,因此计数器不会工作。您需要一个事件通知的优先级队列,每个通知都告诉您事件的时间和将要发生的事件。PriorityQueue按事件时间排序,模拟通过提取下一个事件通知、将模拟时钟更新为其时间并执行事件逻辑进行。SimKit(如下所述)就是这样做的。
AtomicInteger counter; //counter.incrementAndGet();
AtomicLong counter;    //counter.incrementAndGet();