Next: JNI und Java Virtual
Up: Zugriff auf Java Objekte
Previous: Lokale und Globale Referenzen
Da Java Multithreading unterstützt, muß bei der Verwendung von JNI-Methoden damit
gerechnet werden, daß es zu Race-Conditions und Deadlocks zwischen verschiedenen
Threads, welche dieselbe JNI-Methode benutzen, führen kann.
Im Wesentlichen müssen drei Dinge beachtet werden:
- Der JNI-Interface Pointer ist nur für einen Thread gültig. Dieser wird bei einem
wiederholten Aufruf des Threads wieder verwendet. Es werden ein Interface-Pointer
pro Thread genutzt.
- Lokale Referenzen sollen nicht zwischen Threads, welche auf dieselbe Methode
zugreifen, verwendet werden. Da es nicht bestimmt werden kann, wann diese Objekte
wieder freigegeben werden, sollte in diesem Fall eine globale Referenz erzeugt werden.
- Der gemeinsame Zugriff auf globale Variablen sollte synchronisiert werden.
In Java ist zur Synchronisation von Threads das Schlüsselwort synchronized
zu
verwenden. Das JNI unterstützt diese Funktionalität durch die Methoden MonitorEnter
und MonitorExit
, welche den kritischen Bereich eingrenzen. Es werden die
Anzahl der Zugriffe eines Threads festgehalten und durch MonitorEnter
inkrementiert
bzw. durch MonitorExit
decrementiert. So können Threads in den kritischen
Bereich eintreten, wenn der entsprechende Zähler wieder auf 0 gesetzt ist.
Next: JNI und Java Virtual
Up: Zugriff auf Java Objekte
Previous: Lokale und Globale Referenzen
Beispielbenutzer SuSE Linux 6.0
Sun May 9 21:16:36 MEST 1999