SUMMARY Java is a very promising language for use in the simulation of physical models due to its objectoriented nature, portability, robustness and support for multithreading. This paper presents JWarp, a Java library for discrete-event parallel simulations. It is based on an optimistic model for synchronization of the simulation entities: the Time Warp mechanism. We introduce the main features of the library and discuss some of the implementation details. ©1998 John Wiley & Sons, Ltd. In several areas like engineering, computer science, economics and military applications, simulation is used to study the behaviour of complex models. The execution of some of these simulation models can be a very time-consuming task. For statistical reasons, it might be necessary to simulate a model for quite a long time, or to perform the same simulation several times with different parameter values. A possible solution to reduce the execution times of long-running simulations is by using multiple processors operating in parallel[ 1]. A typical simulation model involves several components or entities. By exploiting this inherent model of parallelism, it would be possible to speed up the performance of the simulations by decomposing these components through several processors. Every simulation model is a specification of the corresponding physical model and is composed of a set of states and events. In a discrete event simulation, the state of the system only changes at discrete points in simulated time. A natural decomposition strategy can result in an object-oriented system design, where an object corresponds to some component of the real system and is represented by a computational task that is assigned to a processor for execution. In this way, every component of the model is simulated by a logical process (LP). A discrete-event simulation requires the existence of multiple LP entities, a time-ordered event list holding time stamped events to be processed in the future, a global discrete clock that indicates the current simulation time and a set of state variables that define the state of the simulation. The simplest way to manage the event list would be based on a centralized strategy. The list of events would be managed by a single process (master), and there would be a pool of slave processes running on the parallel system that would execute those events in a concurrent way. However, the existence of a centralized queue of events would represent a bottleneck to the simulation, thereby clearly reducing the potential for parallelism.