Keld Helsgaun describes various kinds of simulators and especially the details of realizing each in java. pdf
He creates abstractions, such as Link, that are to be inherited into domain objects so that they can be efficiently included into queues.
He creates his own Process abstraction and then shows several ways it can be realized with threads.
He duplicates the functionality of SIMULA in Java 1.8 using threads to manage process state but specifically avoiding thread concurrency.
He shows the benefit of pooling treads. A 2 second simulation explodes to 80 seconds without pooling, 6 seconds with pooling.
He distributes javaSimulation, a package corresponding to the classes described in the paper. Version 1.1, March 2004. webpage
K. Helsgaun, "Discrete Event Simulation in Java", DATALOGISKE SKRIFTER (Writings on Computer Science), 2000, Roskilde University.