Hi zusammen,
eine kurze Verständisfrage. Wenn ich eine Methode synchronized mache, kann ich diese dann rekursiv aufrufen?
habe hierzu folgendes gefunden:
Aber hier ist der Rat der folgende:
Was also stimmt jetzt.
Vielleicht kann ich euch zeigen in welchem Fall ich meine Methode synchronized machen möchte:
eine kurze Verständisfrage. Wenn ich eine Methode synchronized mache, kann ich diese dann rekursiv aufrufen?
habe hierzu folgendes gefunden:
Das bedeutet dass der Thread auch rekursiv die Methode aufrufen kann.Da die Sperre während der gesamten Ausführung einer synchronized-Methode nicht mehr abgegeben wird, kann kein anderer Thread in dieser Zeit eine synchronized-Methode auf dem gesperrten Objekt ausführen. Dagegen kann der Thread, der das Sperrobjekt bereits besitzt, sehr wohl weitere geschützte Methoden aufrufen, weil Monitore in Java reentrant sind.
Aber hier ist der Rat der folgende:
The simplest way to avoid deadlock is to follow the rule that says a synchronized method should never call a synchronized method.
Was also stimmt jetzt.
Vielleicht kann ich euch zeigen in welchem Fall ich meine Methode synchronized machen möchte:
Java:
class MyObject{
public synchronized void doCount(){
int count=0;
for(int i = 0; i < getSubObjectsCount(); i++){
MyObject object = getSubObject(i);
count = count + object.doCount();
}
return count;
}}