With a VM system, you have two primary areas that store information about the active applications and the data it USES — the physical random access memory (RAM) and space allocated on hard drives.
To support registering listeners from different threads, whatever mechanism is used to store and manage the list of active listeners must be thread-safe.