Author: gtully
Date: Tue Jan 13 14:15:25 2009
New Revision: 734256

URL: http://svn.apache.org/viewvc?rev=734256&view=rev
Log:
apply patch from https://issues.apache.org/activemq/browse/AMQ-2054

Modified:
    
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/usage/Usage.java

Modified: 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/usage/Usage.java
URL: 
http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/usage/Usage.java?rev=734256&r1=734255&r2=734256&view=diff
==============================================================================
--- 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/usage/Usage.java 
(original)
+++ 
activemq/trunk/activemq-core/src/main/java/org/apache/activemq/usage/Usage.java 
Tue Jan 13 14:15:25 2009
@@ -55,7 +55,7 @@
     private List<T> children = new CopyOnWriteArrayList<T>();
     private final List<Runnable> callbacks = new LinkedList<Runnable>();
     private int pollingTime = 100;
-    private ThreadPoolExecutor executor;
+    private volatile ThreadPoolExecutor executor;
     private AtomicBoolean started=new AtomicBoolean();
 
     public Usage(T parent, String name, float portion) {
@@ -281,7 +281,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public synchronized void start() {
+    public void start() {
         if (started.compareAndSet(false, true)){
             if (parent != null) {
                 parent.addChild(this);
@@ -293,7 +293,7 @@
     }
 
     @SuppressWarnings("unchecked")
-    public synchronized void stop() {
+    public void stop() {
         if (started.compareAndSet(true, false)){
             if (parent != null) {
                 parent.removeChild(this);
@@ -400,19 +400,22 @@
         this.parent = parent;
     }
     
-    protected synchronized Executor getExecutor() {
+    protected Executor getExecutor() {
         if (this.executor == null) {
-            this.executor = new ThreadPoolExecutor(1, 1, 0,
-                    TimeUnit.NANOSECONDS,
-                    new LinkedBlockingQueue<Runnable>(), new ThreadFactory() {
-                        public Thread newThread(Runnable runnable) {
-                            Thread thread = new Thread(runnable, getName()
-                                    + " Usage Thread Pool");
-                            thread.setDaemon(true);
-                            return thread;
-                        }
-                    });
-
+               synchronized(usageMutex) {
+                       if (this.executor == null) {
+                           this.executor = new ThreadPoolExecutor(1, 1, 0,
+                                   TimeUnit.NANOSECONDS,
+                                   new LinkedBlockingQueue<Runnable>(), new 
ThreadFactory() {
+                                       public Thread newThread(Runnable 
runnable) {
+                                           Thread thread = new 
Thread(runnable, getName()
+                                                   + " Usage Thread Pool");
+                                           thread.setDaemon(true);
+                                           return thread;
+                                       }
+                                   });
+                       }
+               }
         }
         return this.executor;
     }


Reply via email to