You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2015/03/09 20:21:40 UTC

svn commit: r1665327 - /uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/MultiThreadUtils.java

Author: schor
Date: Mon Mar  9 19:21:40 2015
New Revision: 1665327

URL: http://svn.apache.org/r1665327
Log:
[UIMA-4280] improve parallelism in multi-thread test utility, add measures of time for various styles of timers

Modified:
    uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/MultiThreadUtils.java

Modified: uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/MultiThreadUtils.java
URL: http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/MultiThreadUtils.java?rev=1665327&r1=1665326&r2=1665327&view=diff
==============================================================================
--- uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/MultiThreadUtils.java (original)
+++ uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/internal/util/MultiThreadUtils.java Mon Mar  9 19:21:40 2015
@@ -18,6 +18,12 @@
  */
 package org.apache.uima.internal.util;
 
+import java.util.Timer;
+import java.util.TimerTask;
+import java.util.concurrent.Executors;
+import java.util.concurrent.ScheduledExecutorService;
+import java.util.concurrent.ScheduledFuture;
+import java.util.concurrent.TimeUnit;
 import java.util.concurrent.atomic.AtomicInteger;
 
 import junit.framework.TestCase;
@@ -59,6 +65,57 @@ public class MultiThreadUtils extends Te
   
   private static final AtomicInteger numberOfExceptions = new AtomicInteger(0);
   
+  public void testMultiThreadTimers() {
+       
+    final int numberOfTimers = 50;
+    final Timer[] timers = new Timer[numberOfTimers];
+
+    final ThreadControl[][] threadState = new ThreadControl[50][1];
+        
+    final int[] repeatNumber = {0};
+    
+    long startTime = System.nanoTime();
+    for (int i = 0; i < numberOfTimers; i++) {
+      final int finalI = i;
+      threadState[i][0] = ThreadControl.WAIT;
+
+      final Timer timer = new Timer();
+      timers[i] = timer;
+      timer.schedule(new TimerTask() {
+        @Override
+        public void run() {
+//          System.out.format("%nTimer %d Popped%n", finalI);
+        }
+      }, 1);
+    }
+    System.out.format("Time to create and start %d timers with separate Timer instances: %,d microsec%n", numberOfTimers, (System.nanoTime() - startTime) / 1000);
+  }
+  
+  public static void testMultiThreadExecutors() {
+       
+    final ScheduledExecutorService scheduler = Executors.newScheduledThreadPool(1);
+    final int numberOfTimers = 50;
+    final ScheduledFuture<?> [] timers = new ScheduledFuture<?> [numberOfTimers];
+
+    
+    long startTime = System.nanoTime();
+    for (int i = 0; i < numberOfTimers; i++) {
+      final int finalI = i;
+
+      final ScheduledFuture<?> timer = scheduler.schedule(new Runnable() {
+        
+        @Override
+        public void run() {
+//          System.out.format("%nScheduled Timer %d Popped%n", finalI);         
+        }
+      }, 1, TimeUnit.MILLISECONDS);
+      timers[i] = timer;
+    }
+    System.out.format("Time to create and start %d timers using a single, reused thread and ScheduledExecutorService: %,d microsec%n", numberOfTimers, (System.nanoTime() - startTime) / 1000);
+  } 
+  
+
+  
   /**
    * On a 2 GHz i7 running Windows, it seems to take about 1 millisecond to create and start up a thread.
    *