Roblet®-Development-Kit
2.2 (30Dez2015)
API für Module

genRob.genControl.modules
Class Use

java.lang.Object
  extended by genRob.genControl.modules.Use

public class Use
extends Object

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

See Also:
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

Use

public Use()
Method Detail

isHalted

public boolean isHalted()
Gibt an, ob ein Roblet® demnächst angehalten wird und daher alle Threads des Roblets® das Modul verlassen sollen.

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 ();
 }
 

Returns:
true, wenn alle Roblet®-Threads das Modul verlassen sollen

halt

public void halt()
Unterdrücke weitere Eintritte von Threads in das Modul bzw. genauer in die Methoden der Instanzen und warte, bis keine Threads mehr im Modul sind.  Jeder weitere Aufruf von raise() wird von nun an eine RuntimeException auslösen.

Diese Methode ist ausschließlich für den Roblet®-Server reserviert.


raise

public 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. Ansonsten erhöhe den Nutzungszähler.  Diese Methode muß als erstes in einer Methoden-Implementierung einer jeden von Roblets® benutzen Instanz aufgerufen werden.

Es muß dann sichergestellt werden, daß lower() vor Austritt aus derselben Methode wieder aufgerufen wird.

Throws:
RuntimeException - falls der Zugang zum Modul momentan nicht erlaubt ist

lower

public 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.  Diese Methode muß vor Austritt einer jeden Methode, in der beim Eintritt 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.2 (30Dez2015)
API für Module

Copyright © 2001-2015, roblet®.org, Hagen Stanek, http://roblet.org/rdk