M
Malcolm
Gast
Hallo,
hab da ne Frage zu folgendem Programm. Wird die Methode ueberweisen von mehreren Threads auf dasselbe Objekt angewendet, so kann es zu Verklemmungen kommen. Kann mir einer von euch ein Beispiel für eine Verklemmung in diesem Programm angeben?
Wie kann ich die Methode überweisen so ändern das keine Verklemmungen mehr möglich sind (die ineinander geschachtelten synchronized Blöcke sollen erhalten bleiben)?
hab da ne Frage zu folgendem Programm. Wird die Methode ueberweisen von mehreren Threads auf dasselbe Objekt angewendet, so kann es zu Verklemmungen kommen. Kann mir einer von euch ein Beispiel für eine Verklemmung in diesem Programm angeben?
Wie kann ich die Methode überweisen so ändern das keine Verklemmungen mehr möglich sind (die ineinander geschachtelten synchronized Blöcke sollen erhalten bleiben)?
Code:
class Konto
{
private float stand;
...
public void aendern(float betrag)
{
stand += betrag;
}
}
class Bank
{
...
public void ueberweisen(int vonKontoNr, int nachKontoNr, float betrag)
{
synchronized(konten[vonKontoNr])
{
synchronized(konten[nachKontoNr])
{
konten[vonKontoNr].ändern(-betrag);
konten[nachKontoNr].ändern(betrag);
}
}
}
...
}