Background: Consider a simulation software developed in Java. A preferred characteristic of a simulator is for its results to remain the same, given the same input. However, due to oversights in the early stage of design, the simulation software requires deterministic scheduling of Java threads (in particular, it requires the object monitor contending/releasing mechanism be deterministic) in order to guarantee simulation results to be the same.
Question: What are the ways to achieve determinism in the object monitor arbitration mechanism? Could it be by setting some configurations of a JVM/JVM-process; or by using certain implementation of JVM (RTS?)?