You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@directory.apache.org by se...@apache.org on 2010/11/27 21:37:35 UTC

svn commit: r1039757 - /directory/buildtools/trunk/junit-addons/src/main/java/org/apache/directory/junit/tools/MultiThreadedMultiInvoker.java

Author: seelmann
Date: Sat Nov 27 20:37:34 2010
New Revision: 1039757

URL: http://svn.apache.org/viewvc?rev=1039757&view=rev
Log:
Use ExecutorService instead of Threads

Modified:
    directory/buildtools/trunk/junit-addons/src/main/java/org/apache/directory/junit/tools/MultiThreadedMultiInvoker.java

Modified: directory/buildtools/trunk/junit-addons/src/main/java/org/apache/directory/junit/tools/MultiThreadedMultiInvoker.java
URL: http://svn.apache.org/viewvc/directory/buildtools/trunk/junit-addons/src/main/java/org/apache/directory/junit/tools/MultiThreadedMultiInvoker.java?rev=1039757&r1=1039756&r2=1039757&view=diff
==============================================================================
--- directory/buildtools/trunk/junit-addons/src/main/java/org/apache/directory/junit/tools/MultiThreadedMultiInvoker.java (original)
+++ directory/buildtools/trunk/junit-addons/src/main/java/org/apache/directory/junit/tools/MultiThreadedMultiInvoker.java Sat Nov 27 20:37:34 2010
@@ -23,6 +23,9 @@ package org.apache.directory.junit.tools
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.List;
+import java.util.concurrent.ExecutorService;
+import java.util.concurrent.Executors;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import org.junit.rules.MethodRule;
@@ -46,7 +49,7 @@ public class MultiThreadedMultiInvoker i
 {
     public static final boolean THREADSAFE = true;
     public static final boolean NOT_THREADSAFE = false;
-    private static AtomicInteger threadCounter = new AtomicInteger();
+    private static ExecutorService pool = Executors.newCachedThreadPool();
     private int numThreads;
     private int numInvocationsPerThread;
     private boolean trace;
@@ -121,7 +124,7 @@ public class MultiThreadedMultiInvoker i
     public Statement apply( final Statement base, final FrameworkMethod method, final Object target )
     {
         final List<Throwable> throwables = Collections.synchronizedList( new ArrayList<Throwable>() );
-        final List<Thread> threads = new ArrayList<Thread>();
+        final List<Runnable> runnables = new ArrayList<Runnable>();
 
         return new Statement()
         {
@@ -135,6 +138,7 @@ public class MultiThreadedMultiInvoker i
                 }
 
                 final long start = System.currentTimeMillis();
+                final AtomicInteger counter = new AtomicInteger();
                 for ( int threadNum = 0; threadNum < count; threadNum++ )
                 {
                     Runnable r = new Runnable()
@@ -164,23 +168,25 @@ public class MultiThreadedMultiInvoker i
                                 }
                                 throwables.add( t );
                             }
+                            finally
+                            {
+                                counter.decrementAndGet();
+                            }
                         }
                     };
 
-                    String name = MultiThreadedMultiInvoker.class.getSimpleName() + "-Thread-"
-                        + threadCounter.incrementAndGet();
-                    Thread t = new Thread( r, name );
-                    threads.add( t );
+                    runnables.add( r );
+                    counter.incrementAndGet();
                 }
 
-                for ( Thread thread : threads )
+                for ( Runnable r : runnables )
                 {
-                    thread.start();
+                    pool.execute( r );
                 }
-
-                for ( Thread thread : threads )
+                
+                while(counter.get() > 0)
                 {
-                    thread.join();
+                    Thread.sleep( 1000 );
                 }
 
                 if ( !throwables.isEmpty() )