Prevent from calling register and fireEvent at the same time

This commit is contained in:
huanghongxun
2018-10-13 11:17:16 +08:00
parent 8004cb3a64
commit 5918b04b48

View File

@@ -47,7 +47,7 @@ public final class EventManager<T extends Event> {
register(consumer, EventPriority.NORMAL); register(consumer, EventPriority.NORMAL);
} }
public void register(Consumer<T> consumer, EventPriority priority) { public synchronized void register(Consumer<T> consumer, EventPriority priority) {
if (!handlers.get(priority).contains(consumer)) if (!handlers.get(priority).contains(consumer))
handlers.put(priority, consumer); handlers.put(priority, consumer);
} }
@@ -60,7 +60,7 @@ public final class EventManager<T extends Event> {
register(t -> runnable.run(), priority); register(t -> runnable.run(), priority);
} }
public Event.Result fireEvent(T event) { public synchronized Event.Result fireEvent(T event) {
for (EventPriority priority : EventPriority.values()) { for (EventPriority priority : EventPriority.values()) {
for (Consumer<T> handler : handlers.get(priority)) for (Consumer<T> handler : handlers.get(priority))
handler.accept(event); handler.accept(event);