FWIW, I think ConcurrentLinkedQueue is a wrong data structure for this use case. Reason is we want to support off(String event, Listener listener)  which requires a full scan of the queue.