Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Zwei Methoden zueinander Thread-safe machen (Locken)
Wie "locke" ich am besten zwei Methoden gegeneinander, sodass ich eine gewisse Thread-Sicherheit habe.
Also ich hätte am besten so, dass,
wenn eine der beiden Methoden läuft,
die andere warten muss, bis die erste Methode fertig ist.
Und bei umgekehrter Aufruf-Reihenfolge soll das natürlich auch gelten.
Code:
class MyClass{
method1(){
//Warte bis Methode 2 fertig ausgeführt wurde, falls diese gerade läuft
}
method2(){
//Warte bis Methode 1 fertig ausgeführt wurde, falls diese gerade läuft
}
}
Ja, die sind in der selben klasse. Das ist ja das Problem ^^"
Dieses "synchronized" scheint mir alle methoden in meiner Klasse gegeneinander zu locken.
Ich will jedoch je 2 Methoden zueinander locken.
In C++ gab es dazu eine critical section. Da konnte man mein Problem einfach mit mehreren critical section objekten lösen.
ist in java auch so ... nur musst du in java diesen sync-block selbst definieren ... und als lock-objekt kann man alles nutzen was im scope liegt
//EDIT
auch wenn mir nicht wirklich klar wird wozu das dienen soll ... aber SO könnte man es auch umsetzen
Java:
public synchronized void doMethod(int m)
{
switch(m)
{
case 1:
method1();
break;
case 2:
method2();
break;
case 3:
method3();
break;
default:
throw new IllegalArgumentException("wrong method");
}
}
die methode doMethod(int) selbst ist durch synchronized an sich gelockt ... und kann daher immer nur von einem thread gecallt werden ...
Kann man das so machen?
mPair1ToSyncOn wäre quasi mein Object, auf welches ich meine zwei methoden synchronisiere.
Für jedes weitere Methoden-Pärchen hätte ich ein weiteres Object.
Kann man das so machen?
mPair1ToSyncOn wäre quasi mein Object, auf welches ich meine zwei methoden synchronisiere.
Für jedes weitere Methoden-Pärchen hätte ich ein weiteres Object.
Ja genau so macht man das (wenn man mal davon absieht, dass dein Code nicht kompiliert).
Wenn du vorhast mehrere solcher "Päarchen" zu erstellen, solltest du dir sinnvollere Namen für die Monitor-Objekte überlegen. Denn irgendwann stehts du dann vor "mPair27ToSyncOn" und hast keinen Plan, wozu das Objekt jetzt der Monitor ist. Also: Sinnvolle Namensgebung!
@Sen-Mithrarin: Nicht dein Ernst, oder!? :autsch:
Natürlich kann man Dinge auch mit Konstukten lösen, die unflexibel und krytisch sind. Geht immer! Aber gerade wenn ein Anfänger eine Frage zu "synchronized" stellt (und eigentlich zu jedem anderen Zeitpunkt auch), würde ich von solchem Code dringend abraten. Und das Problem "irgendwie" zu lösen statt sich zu informieren, wie man es üblicher Weise löst, ist meines Erachtens eines der größten Probleme, die Programmierer sich machen können.
Von daher: 6, setzen! :noe:
@natac
ich muss erlich zugeben das ich persönlich keinen unterschied sehe ob ich mir eine switch-methode schreibe und diese synce ... oder ein hilfs-objekt nehme und auf dieses synce ... der effekt bleibt gleich : es kann nur ein thread gleichzeitig den gelockten bereich betreten
ich lass mich aber über unterschiede gerne aufklären