Ich habe an Orten gelesen, dass es keine gute Programmierpraxis ist, ein Lock
Objekt zu erwerben, ohne dass der folgende Code in einem try...finally
Block enthalten ist, so dass das Schloss selbst dann ausgelöst werden kann, wenn eine Ausnahme ausgelöst wird.Löscht ein Thread eine Sperre, wenn es fertig ist?
Es klingt vielleicht wie eine einfache Frage: Werden alle zu einem Thread gehörenden Sperren automatisch freigegeben, wenn der Thread fertig ist?
Der Grund, warum ich diese Frage stelle, ist, dass das Programm, an dem ich arbeite, so ist, dass sobald ein Thread eine Sperre erwirbt, es keinen Grund haben sollte, bis es beendet ist. Außerdem bin ich neu in der Verwendung von Sperren, also frage ich mich, ob es irgendwelche Fallstricke gibt, die ich vielleicht nicht berücksichtigt habe. Muss ich mir Sorgen darüber machen, dass Sperren explizit in meinem Code freigegeben werden, bevor der Thread beendet wird, oder kann ich es der JVM überlassen, da ich sicher bin, dass andere Threads, die auf allen Sperren des aktiven Threads blockiert sind, sofort aktiviert werden Faden stoppt?
Bitte poste etwas Code. – C1sc0
@ C1sc0: Irgendein Code über was? Die Frage hat eine ziemlich klare Problemstellung – Patrick
Sie können dies wahrscheinlich mit einer sehr einfachen Anwendung testen. Erstellen Sie zwei Threads, versuchen Sie, die gleiche Sperre zu erhalten und den Thread direkt danach zu beenden. Wenn der zweite Thread die Sperre erhält, ist er tatsächlich entsperrt. – Patrick