|
Roblet®-Development-Kit 2.0 (08Jan11) API für Module |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Object genRob.genControl.modules.Use
public class Use
Instanzen dieser Klasse repräsentieren die momentane Nutzung eines Moduls durch ein bestimmtes Roblet® und werden Nutzungszähler genannt. Derartiges wird benötigt, damit der Roblet®-Server sicherstellen kann, daß kein Thread eines bestimmten Roblets® sich mehr in einem Modul befindet.
Roblets® treten in Module nur über Methoden von Einheiten-Instanzen oder anderer Instanzen des Moduls ein. Diese Tatsache muß mitgezählt werden. Bei jedem Eintritt muß daher der entsprechende Nutzungszähler erhöht und vor jedem Austritt wieder erniedrigt werden. Dabei muß sichergestellt werden, daß die Erniedrigung auch wirklich stattfindet und nicht etwa durch eine geworfene Ausnahme entfällt.
Folgende Sequenz sichert derartige Anforderungen und sollte in jeder Methode jeder Instanz des Moduls, in die ein Roblet® eintreten kann, verwendete werden:
class ClassInTheModuleWithInstancesUsedInTheRoblet { ... private Use m_rUse; // Instanz von 'getUnit4Slot' ... public void someUnitMethodImplementation (WhateverParameter p) throws SomeException { m_rUse. raise (); // Erhöhe den Nutzungszähler try { // die eigentlichen Ausführungen hier } finally // Nachfolgendes wird in jedem Falle ausgeführt { m_rUse. lower (); // Erniedrige den Nutzungszähler } } } ...
Module
Constructor Summary | |
---|---|
Use()
|
Method Summary | |
---|---|
void |
halt()
Unterdrücke weitere Eintritte von Threads in das Modul bzw. |
boolean |
isHalted()
Gibt an, ob ein Roblet® demnächst angehalten wird und daher alle Threads des Roblets® das Modul verlassen sollen. |
void |
lower()
Erniedrigt den Nutzungszähler und informiert ein möglicherweise wartendenden Roblet®-Server, für den Fall, daß der Zähler auf Null ging. |
void |
raise()
Prüfe, ob ein Eintritt in das Modul bzw. genauer die Methode der Instanz erlaubt ist und werfe eine Ausnahme, wenn das nicht der Fall ist. |
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public Use()
Method Detail |
---|
public boolean isHalted()
Gedacht ist diese Methode zur Verwendung in Methoden, deren Verhalten darin besteht, einen eintretenden (Roblet®-)Thread solange anzuhalten, bis irgendein gewisses Ereignis eintritt. Mit Hilfe der nachfolgenden Sequenz lassen sich Warteschleifen derart implementieren, daß Roblets® sicher vom Roblet®-Server beendet werden können.
... m_rUse. raise (); try { // Wiederhole, solange ein gewisses Kriterium erfüllt ist while (...) { // Warte für eine halbe Sekunde wait (500); // Soll der Thread das Modul verlassen? if (m_rUse. isHalted ()) // JA. throw new RuntimeException ("Roblet halted."); } ... } finally { m_rUse. lower (); }
public void halt()
raise()
wird von nun an eine
RuntimeException
auslösen.
Diese Methode ist ausschließlich für den Roblet®-Server reserviert.
public void raise()
Es muß dann sichergestellt werden, daß lower()
vor Austritt aus derselben Methode wieder aufgerufen wird.
RuntimeException
- falls der Zugang zum Modul momentan nicht
erlaubt istpublic void lower()
raise()
aufgerufen wurde, aufgerufen werden.
Das darf nie ausgelassen werden.
Die Anzahl der Aufrufe dieser Methode muß genau mit der Anzahl der
Aufrufe von raise()
übereinstimmen.
Ist der Zähler auf Null gegangen, so bedeutet das, daß kein Thread mehr
im Modul ist.
|
Roblet®-Development-Kit 2.0 (08Jan11) API für Module |
||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | ||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |