AMETAS.util
Class Monitor
java.lang.Object
AMETAS.util.Monitor
- All Implemented Interfaces:
- java.io.Serializable
- public class Monitor
- extends java.lang.Object
- implements java.io.Serializable
Ein Objekt dieser Klasse kann als Java-Monitor verwendet
werden. Oft reicht es nicht aus, this als Monitor in
einem synchronized(...)-Statement zu verwenden, weil
man mehrere Monitore innerhalb einer Klasse benötigt oder den
Monitor vor abgeleiteten Klassen verbergen will. In diesem Fall muß
man auf einer eigens hierfür angelegten Instanzvariable
synchronisieren. Hierfür bietet sich grundsätzlich
java.lang.Object an. Man legt also eine Variable an:
private Object m_objSync = new Object();
um darauf im fraglichen Codeteil zu synchronisieren:
...
synchronized( m_objSync ) {
...
m_objSync.wait();
...
}
...
Wenn jedoch ein Objekt der umgebenden Klasse, z.B. ein Agent,
serialisiert werden soll, bereitet die Verwendung der Klasse
java.lang.Object unerwartete Probleme: Sie ist nicht
serialisierbar. Um diesem Problem zu entgehen muß man eine andere
Klasse zur Erzeugung des Monitors verwenden,
z.B. Integer, da diese serialisierbar
ist. Codeästheten stehen jedoch auf dem Standpunkt, daß ein
Integer nur verwendet werden sollte, wo ein
Integer auch benötigt wird. Die Verwendung einer
abgeleiteten Klasse allein in ihrer Eigenschaft als
Object ist von Standpunkt der Verständlichkeit und
Übersichtlichkeit daher fraglich. Dehalb gibt es diese Klasse. Sie
macht nichts weiter, als das Interface
java.io.Serializable zu implementieren, und als
Monitor zu dienen. Dies ist übrigens die kleinste Klasse von
AMETAS ;-). Obiges Codefragment sollte also wie folgt aussehen:
private Monitor m_monSync = new Monitor();
...
synchronized( m_monSync ) {
...
m_monSync.wait();
...
}
...
- Since:
- 2.1.1
- See Also:
- Serialized Form
| Methods inherited from class java.lang.Object |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Monitor
public Monitor()