Initialize the default event bus statically

The previous method that used double checked synchronization offers
little performance benefits over a plain static initialization.

Reported-by @harkle-the-cake
This commit is contained in:
Kai S. K. Engelbart 2021-10-15 08:25:38 +02:00
parent b915a5c490
commit 33ebf0302b
Signed by: kske
GPG Key ID: 8BEB13EC5DF7EF13

View File

@ -52,26 +52,18 @@ public final class EventBus {
*/
public static final int DEFAULT_PRIORITY = 100;
private static volatile EventBus singletonInstance;
private static final EventBus singletonInstance = new EventBus();
private static final Logger logger = System.getLogger(EventBus.class.getName());
/**
* Produces a singleton instance of the event bus. It is lazily initialized on the first call.
* Returns the default event bus, which is a statically initialized singleton instance.
*
* @return a singleton instance of the event bus.
* @return the default event bus
* @since 0.0.2
*/
public static EventBus getInstance() {
EventBus instance = singletonInstance;
if (instance == null)
synchronized (EventBus.class) {
if ((instance = singletonInstance) == null) {
logger.log(Level.DEBUG, "Initializing singleton event bus instance");
instance = singletonInstance = new EventBus();
}
}
return instance;
return singletonInstance;
}
private final Map<Class<?>, TreeSet<EventHandler>> bindings =