Index: C:/backyard/activemq/activemq-core/src/main/java/org/apache/activemq/usage/Usage.java =================================================================== --- C:/backyard/activemq/activemq-core/src/main/java/org/apache/activemq/usage/Usage.java (revision 585186) +++ C:/backyard/activemq/activemq-core/src/main/java/org/apache/activemq/usage/Usage.java (working copy) @@ -233,7 +233,7 @@ return (int)((((retrieveUsage() * 100) / limiter.getLimit()) / percentUsageMinDelta) * percentUsageMinDelta); } - private void fireEvent(int oldPercentUsage, int newPercentUsage) { + private void fireEvent(final int oldPercentUsage, final int newPercentUsage) { if (debug) { LOG.debug("Memory usage change. from: " + oldPercentUsage + ", to: " + newPercentUsage); } @@ -248,11 +248,19 @@ callbacks.clear(); } } - // Let the listeners know - for (Iterator iter = listeners.iterator(); iter.hasNext();) { - UsageListener l = iter.next(); - l.onUsageChanged(this, oldPercentUsage, newPercentUsage); - } + // Let the listeners know on a separate thread + Runnable listenerNotifier = new Runnable() { + + public void run() { + for (Iterator iter = listeners.iterator(); iter.hasNext();) { + UsageListener l = iter.next(); + l.onUsageChanged(Usage.this, oldPercentUsage, newPercentUsage); + } + } + + }; + //TODO usage a thread pool here? + new Thread(listenerNotifier, "Usage.fireEvent").start(); } public String getName() {