You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@activemq.apache.org by ch...@apache.org on 2007/09/10 20:27:41 UTC

svn commit: r574321 - /activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/Scheduler.java

Author: chirino
Date: Mon Sep 10 11:27:40 2007
New Revision: 574321

URL: http://svn.apache.org/viewvc?rev=574321&view=rev
Log:
Switch to using a Timer to schedual tasks.  Seems to have much more acurate time delays between executions.


Modified:
    activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/Scheduler.java

Modified: activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/Scheduler.java
URL: http://svn.apache.org/viewvc/activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/Scheduler.java?rev=574321&r1=574320&r2=574321&view=diff
==============================================================================
--- activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/Scheduler.java (original)
+++ activemq/trunk/activemq-core/src/main/java/org/apache/activemq/thread/Scheduler.java Mon Sep 10 11:27:40 2007
@@ -17,54 +17,48 @@
 package org.apache.activemq.thread;
 
 import java.util.HashMap;
-
-import java.util.concurrent.ScheduledFuture;
-import java.util.concurrent.ScheduledThreadPoolExecutor;
-import java.util.concurrent.ThreadFactory;
-import java.util.concurrent.TimeUnit;
+import java.util.Timer;
+import java.util.TimerTask;
 
 /**
  * @version $Revision$
  */
 public final class Scheduler {
 
-    public static final ScheduledThreadPoolExecutor CLOCK_DAEMON = new ScheduledThreadPoolExecutor(5, createThreadFactory());
-    static {
-        CLOCK_DAEMON.setKeepAliveTime(5, TimeUnit.SECONDS);
-    }
-    private static final HashMap<Runnable, ScheduledFuture> CLOCK_TICKETS = new HashMap<Runnable, ScheduledFuture>();
+    private static final class SchedulerTimerTask extends TimerTask {
+		private final Runnable task;
 
-    private Scheduler() {
-    }
+		private SchedulerTimerTask(Runnable task) {
+			this.task = task;
+		}
+
+		public void run() {
+			task.run();							
+		}
+	}
+
+	public static final Timer CLOCK_DAEMON = new Timer("ActiveMQ Scheduler", true);
+    private static final HashMap<Runnable, TimerTask> TIMER_TASKS = new HashMap<Runnable, TimerTask>();
 
-    private static ThreadFactory createThreadFactory() {
-        return new ThreadFactory() {
-            public Thread newThread(Runnable runnable) {
-                Thread thread = new Thread(runnable, "ActiveMQ Scheduler");
-                thread.setDaemon(true);
-                return thread;
-            }
-        };
+    private Scheduler() {
     }
 
     public static synchronized void executePeriodically(final Runnable task, long period) {
-        ScheduledFuture ticket = CLOCK_DAEMON
-            .scheduleAtFixedRate(task, period, period, TimeUnit.MILLISECONDS);
-        CLOCK_TICKETS.put(task, ticket);
+    	TimerTask timerTask = new SchedulerTimerTask(task);
+        CLOCK_DAEMON.scheduleAtFixedRate(timerTask, period, period);
+        TIMER_TASKS.put(task, timerTask);
     }
 
     public static synchronized void cancel(Runnable task) {
-        ScheduledFuture ticket = CLOCK_TICKETS.remove(task);
+    	TimerTask ticket = TIMER_TASKS.remove(task);
         if (ticket != null) {
-            ticket.cancel(false);
-            if (ticket instanceof Runnable) {
-                CLOCK_DAEMON.remove((Runnable)ticket);
-            }
+            ticket.cancel();
         }
     }
 
     public static void executeAfterDelay(final Runnable task, long redeliveryDelay) {
-        CLOCK_DAEMON.schedule(task, redeliveryDelay, TimeUnit.MILLISECONDS);
+    	TimerTask timerTask = new SchedulerTimerTask(task);
+        CLOCK_DAEMON.schedule(timerTask, redeliveryDelay);
     }
 
 }