de.jsystems.tools.thread
Class ThreadManager

java.lang.Object
  extended byde.jsystems.tools.thread.ThreadManager
All Implemented Interfaces:
EventListener, ThreadListener

public final class ThreadManager
extends Object
implements ThreadListener

Diese Klasse stellt den ThreadManager dar. Dieser verwaltet einen Pool von Threads. Diese Threads können ein ExecuteObject ausführen. Wie oft und mit welchen Intervallen dieses Objekt ausgeführt wird, legt das Objekt selbst fest. Während der Ausführung eines ExecuteObject nimmt der ausführende Thread den Namen des ExecuteObject an. Über diesen Namen kann das Object dann angesprochen werden. Der Name wird auch zum stoppen, restarten und killen der Ausführung benötigt.

Version:
1.0
Author:
Jens Homm

Nested Class Summary
(package private)  class ThreadManager.MessageContainer
          In dieser Klasse wird eine Message gespeichert mit dem zugehörigen ThreadNamen
(package private)  class ThreadManager.TimeObject
          Klasse zum speichern eines ExecuteObjects, das zu einer bestimmten Zeit gestartet werden soll
 
Method Summary
 void addMessage(String name, ThreadMessage message)
          Fügt für einen Thread eine neue Message hinzu.
 void destroy()
          Beendet den ThreadManager und alle enthaltenen Threads.
 void executeAfter(String threadName, IExecuteObject executeObject)
          Startet den Thread, sobald der Thread mit dem übergeben Namen beendet ist.
 void executeAt(long time, IExecuteObject executeObject)
          Startet das übergebene Object, sobald die angegebene Zeit erreicht ist.
 void executeInThread(IExecuteObject executeObject)
          Setzt das übergebene ExecuteObject in einen Thread und führt die darin enthaltene Methode execute aus.
static ThreadManager getInstance()
          Erzeugt eine Instanz des ThreadMaangers und gibt sie zurück.
 void killThread(String name)
          Killt den über den Namen spezifizierten Thread.
 void reRunThread(String name)
          Nimmt die Ausführung der execute()-Methode des Threads wieder auf, der durch den übergebenen Namen identifiziert wird.
 void setMessage(String name, ThreadMessage message)
          Diese Methode dient zur Ansteuerung messagegesteuerter Threads.
 void stopThread(String name)
          Stoppt den über einen Namen identifizierten Thread.
 void threadExecuted(ThreadEvent event)
          Diese Methode wird aufgerufen, wenn ein Thread fertig ist.
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Method Detail

getInstance

public static ThreadManager getInstance()
Erzeugt eine Instanz des ThreadMaangers und gibt sie zurück.

Returns:
Eine Instanz des Threadmanagers.

stopThread

public void stopThread(String name)
Stoppt den über einen Namen identifizierten Thread. Falls es diesen Thread nicht gibt, passiert nichts.

Parameters:
name - Der Name des ExecuteObjects, dessen Ausführung angehalten werden soll.

reRunThread

public void reRunThread(String name)
Nimmt die Ausführung der execute()-Methode des Threads wieder auf, der durch den übergebenen Namen identifiziert wird. Dieser Name entspricht dem Namen aus dem ExecuteObject. Falls es diesen Thread nicht gibt, passiert nichts.

Parameters:
name - Der Name des ExecuteObjects, dessen Ausführung wieder aufgenommen werden soll.

killThread

public void killThread(String name)
Killt den über den Namen spezifizierten Thread. Falls es unter diesem Namen keinen Thread gibt, passiert nichts. Ein so beendeter Thread kann über die Methode reRunThread(name) nicht wieder gestartet werden.

Parameters:
name - Name des ExecuteObject, dessen Ausführung komplett beendet werden soll.

addMessage

public void addMessage(String name,
                       ThreadMessage message)
Fügt für einen Thread eine neue Message hinzu. Diese wird an den Thread weitergeleitet, sobald die letzte an diesen Thread geschickte Message verarbeitet wurde. Wann die Message an den Thread geschickt wird, ist nicht festgelegt. Der Name ist hier gleichbedeutend mit dem Namen des ausgeführten ExecuteObject. Falls es keinen Thread mit dem übergebenen Namen gibt, wird die Nachricht wieder aus der Liste gelüscht.

Parameters:
name - Name des Threads, der die Message erhalten soll.
message - Die Message, die an den Thread geschickt wird.

setMessage

public void setMessage(String name,
                       ThreadMessage message)
Diese Methode dient zur Ansteuerung messagegesteuerter Threads. Sobald hier eine Message eingestellt wird, wird der entsprechende Thread aufgeweckt, damit er die Message bearbeiten kann. Sobald er damit fertig ist, schläft er wieder bis zur nächsten Message. Dieses vorgehen ist unabhängig von den eigentlichen Messages, die %uuml;ber die Methode addMessage verschickt werden. Allerdings dürfen messagegesteuerte Threads nicht über addMessage angesprochen werden, da es hierbei passieren kann, das der Thread gar nicht mehr reagiert.

Parameters:
name - Name des Threads, der die Message erhalten soll.
message - Die Message, die an den Thread geschickt wird.

executeInThread

public void executeInThread(IExecuteObject executeObject)
Setzt das übergebene ExecuteObject in einen Thread und führt die darin enthaltene Methode execute aus. Falls hier NULL übergeben wird, wird eine IllegalArgumentException ausgel�st.

Parameters:
executeObject - Das auszuführende Objekt.

executeAfter

public void executeAfter(String threadName,
                         IExecuteObject executeObject)
Startet den Thread, sobald der Thread mit dem übergeben Namen beendet ist. Falls es unter diesem Namen keinen Thread gibt, wird das executeObject sofort ausgeführt. Pro übergebenen Namen kann nur ein Thread warten. Wird diese Methode zweimal mit dem gleichen Namen aufgerufen, dann wird nur das ExecuteObject des letzten Aufrufes gespeichert und gestartet, sobald der Thread, auf den gewartet wird, fertig ist. Das executeObject des ersten Aufrufes ist nicht mehr erreichbar.

Parameters:
threadName - Der Name des Threads, auf den mit der ausführung gewartet werden soll.
executeObject - Das ExecuteObject, das ausgeführt werden soll, wenn der Thread mit dem angegebenen Namen fertig ist.

executeAt

public void executeAt(long time,
                      IExecuteObject executeObject)
Startet das übergebene Object, sobald die angegebene Zeit erreicht ist. Der Parameter time stellt die vergangene Zeit in ms seit dem 01.01.1970 dar. Die übergebene Zeit wird nicht auf die Millisekunde genau eingehalten, da nur alle 1000 ms die übergebene Zeit mit der aktuellen Zeit verglichen wird.

Parameters:
time - Die Zeit in ms, ab der das executeObject ausgeführt werden soll.
executeObject - Das auszuführende Object.

threadExecuted

public void threadExecuted(ThreadEvent event)
Diese Methode wird aufgerufen, wenn ein Thread fertig ist.

Specified by:
threadExecuted in interface ThreadListener

destroy

public void destroy()
Beendet den ThreadManager und alle enthaltenen Threads. Dabei wird die Instanz des ThreadManager selbst zerstört. Alle gerade noch laufenden Threads werden beendet. Dabei werden eventuell registrierte Listener benachrichtigt, das der Thread gekillt wurde. Diese Methode sollte nur aufgerufen werden, wenn die Applikation beendet wird.