Hallo zusammen
So, nachdem ich mich nun mehrere Tage mit der Fehlersuche beschäftigt (und wirklich viel gelernt habe), bin ich am Ende meines Lateins. Ich finde den Fehler einfach nicht und bitte euch, mich zu unterstützen. ;(
Aufgabe:
Es geht darum, eine Bank mit 5 Konten zu erstellen, wobei jedes Konto zu Beginn 1000 EUR erhält.
Insgesamt sollen sodann 50 Threads erstellt, werden, die während rund 60 Sekunden nachfolgend beschriebenen Algorithmus ausführen sollen:
- wähle zwei zufällige Konten (A und B)
- ziehe von Konto A 100 EUR ab
- schreibe Konto B 100 EUR gut
- schlafe 2ms
- beginne von vorne, bis die 60 Sekunden rum sind
Mein Problem:
Das Programm kann wie gewünscht ausgeführt werden. Nur: die Werte, die am Ende ausgegeben werden, stimmen mal so gar nicht - die Summe aller Konten müsste ja nach wie vor 5000 betragen. Ich erhalte jedoch Werte jenseits von gut und böse - und weiss schlichtweg nicht weshalb. HELP!!! :shock:
Der Code
Vielen Dank für eure Unterstützung!!!
Gruss nebelparder
So, nachdem ich mich nun mehrere Tage mit der Fehlersuche beschäftigt (und wirklich viel gelernt habe), bin ich am Ende meines Lateins. Ich finde den Fehler einfach nicht und bitte euch, mich zu unterstützen. ;(
Aufgabe:
Es geht darum, eine Bank mit 5 Konten zu erstellen, wobei jedes Konto zu Beginn 1000 EUR erhält.
Insgesamt sollen sodann 50 Threads erstellt, werden, die während rund 60 Sekunden nachfolgend beschriebenen Algorithmus ausführen sollen:
- wähle zwei zufällige Konten (A und B)
- ziehe von Konto A 100 EUR ab
- schreibe Konto B 100 EUR gut
- schlafe 2ms
- beginne von vorne, bis die 60 Sekunden rum sind
Mein Problem:
Das Programm kann wie gewünscht ausgeführt werden. Nur: die Werte, die am Ende ausgegeben werden, stimmen mal so gar nicht - die Summe aller Konten müsste ja nach wie vor 5000 betragen. Ich erhalte jedoch Werte jenseits von gut und böse - und weiss schlichtweg nicht weshalb. HELP!!! :shock:
Der Code
Java:
public class Processor {
public static void main(String[] args) {
Bank myBank = new Bank();
Teller[] staff = new Teller[50];
for(int i = 0; i < 50; i++)
{
String name = "Teller_" + i;
staff[i] = new Teller(name,myBank);
staff[i].start();
}
try {
Thread.sleep(60000);
}
catch (InterruptedException e)
{}
for(int i = 0; i < 50; i++)
{
staff[i].interrupt();
}
myBank.zeigeBilanz();
}
}
Java:
public class Teller extends Thread
{
private Bank bank;
public Teller(String name, Bank bank)
{
super(name);
this.bank = bank;
}
public void run()
{
while( !isInterrupted() )
{
bank.bucheBelastung();
bank.bucheGutschrift();
try
{
Thread.sleep(2);
}
catch(InterruptedException e)
{
interrupt();
}
}
}
}
Java:
public class Bank
{
private Random random;
private Konto[] konten;
public Bank()
{
random = new Random();
konten = new Konto[5];
for(int i = 0; i < konten.length; i++) {
konten[i] = new Konto(1000);
}
}
public synchronized void bucheBelastung() {
Konto a = konten[(random.nextInt(5))];
a.setKontostand(a.getKontostand() - 100);
}
public synchronized void bucheGutschrift() {
Konto b = konten[(random.nextInt(5))];
b.setKontostand(b.getKontostand() + 100);
}
public void zeigeBilanz() {
for(int i = 0; i < konten.length; i++) {
int saldo = konten[i].getKontostand();
System.out.println("Konto " + i + ": " + saldo + " CHF");
}
}
}
Vielen Dank für eure Unterstützung!!!
Gruss nebelparder