Hallo,
Ich habe ein Problem mit dem ReentrantLock und zwar beim unlock. In der Klasse Node wird der ReentrantLock deklariert und initialisiert und in einer anderen Klasse gibt es dann eine ArrayList mit lauter Nodes, so dass jeder Node ja sein "eigenes" Lock haben müsste. Ich will jetzt alle Nodes dieser ArrayList sperren, also lock auf den eigenen ReentrantLocks ausführen mithilfe einer for-each Schleife:
Danach den kritischen Code ausführen, und dann wieder in einer for-each Schleife, alle wieder entsperren, also unlock().
Ich bekomme jedoch bei dem unlock eine java.lang.IllegalMonitorStateException. Durch Print-Augaben habe ich jetzt schon herausgefunden, des der Lock nicht mehr vom aktuell ausführenden Thread gehalten wird. Ich denke Java löscht irgendwie alle Locks sobald } kommt- Kann das sein? Und gibt es eine Möglichkeit das zu verhindern? Bzw. irgendjemand ne Idee wie ich alle mit lock sperren kann ohne Schleife?
Liebe Grüße
Ich habe ein Problem mit dem ReentrantLock und zwar beim unlock. In der Klasse Node wird der ReentrantLock deklariert und initialisiert und in einer anderen Klasse gibt es dann eine ArrayList mit lauter Nodes, so dass jeder Node ja sein "eigenes" Lock haben müsste. Ich will jetzt alle Nodes dieser ArrayList sperren, also lock auf den eigenen ReentrantLocks ausführen mithilfe einer for-each Schleife:
Java:
for (Node n : nachbar){
n.reentrant.lock();}
Danach den kritischen Code ausführen, und dann wieder in einer for-each Schleife, alle wieder entsperren, also unlock().
Ich bekomme jedoch bei dem unlock eine java.lang.IllegalMonitorStateException. Durch Print-Augaben habe ich jetzt schon herausgefunden, des der Lock nicht mehr vom aktuell ausführenden Thread gehalten wird. Ich denke Java löscht irgendwie alle Locks sobald } kommt- Kann das sein? Und gibt es eine Möglichkeit das zu verhindern? Bzw. irgendjemand ne Idee wie ich alle mit lock sperren kann ohne Schleife?
Liebe Grüße