Scheduler und TimerTask

killram

Neues Mitglied
Guten Tag

Mein Problem liegt darin, dass wenn ich eine TimerTask-Klasse über einen Timer laufen lasse, dieser zum ersten Mal ausgeführt wird, dann aber erst nach doppelter Intervall-Zeit gerade 2x durchläuft.
Java:
public class MyTimer {

// Hashtable für die Timer
public static Hashtable<String,Timer> Timers = new Hashtable<String,Timer>();
// Objekt für die auszuführende Klasse
private static Object Schedule = new Object();
// Temporären Timer() erstellen
private static Timer tempTimer = new Timer();

/* Code */

public static String startJob(String sID) {

// Klasse dynamisch aus dem Datenbankeintrag aufrufen
Schedule = Class.forName(sClass).getConstructor(String.class,String.class).newInstance(sID);

// Neuer Timer() in der HashTable erstellen
Timers.put(sID, new Timer());
// Timer aus der Hashtable holen und in den temp. Timer stecken
tempTimer = (Timer)Timers.get(sID);
// Den Job schedulen
iIntervall = iIntervall*60000;

tempTimer.scheduleAtFixedRate((TimerTask)Schedule, date, Long.valueOf(iIntervall));

/* Code und exception-handling usw... */
}
}
 

killram

Neues Mitglied
Guten Tag

Mein Problem liegt darin, dass wenn ich eine TimerTask-Klasse über einen Timer laufen lasse, dieser zum ersten Mal ausgeführt wird, dann aber erst nach doppelter Intervall-Zeit gerade 2x durchläuft.

Die auszuführende Klasse wird aus der DB über die jeweige ID geholt.

Java:
public class MyTimer {

// Hashtable für die Timer
public static Hashtable<String,Timer> Timers = new Hashtable<String,Timer>();
// Objekt für die auszuführende Klasse
private static Object Schedule = new Object();
// Temporären Timer() erstellen
private static Timer tempTimer = new Timer();

/* Code */

public static String startJob(String sID) {

// Klasse dynamisch aus dem Datenbankeintrag aufrufen
Schedule = Class.forName(sClass).getConstructor(String.class,String.class).newInstance(sID);

// Neuer Timer() in der HashTable erstellen
Timers.put(sID, new Timer());
// Timer aus der Hashtable holen und in den temp. Timer stecken
tempTimer = (Timer)Timers.get(sID);
// Den Job schedulen
iIntervall = iIntervall*60000;

tempTimer.scheduleAtFixedRate((TimerTask)Schedule, date, Long.valueOf(iIntervall));

/* Code und exception-handling usw... */
}
}
 

Michael...

Top Contributor
Eine Antwort auf Dein Problem habe ich nicht, aber:
- Ist es Absicht, dass das Intervall bei jedem Aufruf von startJob um den Faktor 60000 vergrössert wird?
- Warum verwendest Du für jeden TimerTask einen neuen Timer, anstatt nur ein Timerobjekt zu erzeugen und dieses alle Timertasks disponieren zu lassen?
- Warum steckst Du erst einen neuen Timer in die Hashtable, um ihn danach wieder auszulesen? Ein casten ist hierbei sowieso unnötig da über die generische Deklaration der Hashtable schon festgelegt ist, dass da ein Timerobjekt rauskommt.
 

Ähnliche Java Themen

Neue Themen


Oben