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.
*