Hallo liebe Community,
ich arbeite momentan ein Multi-threading Beispiel durch. Es gibt eine Bank und mehrere Konten und Angestelle.
Das Objekt Bank enthält in dem Beispiel 3 Objekte vom Typ Konten und Objekte der Klasse Angestelle führen die Überweisungen durch -> Bei 3 Angestellten also 3 paralelle Überweisungen.
Hier zur Verdeutlichung:
Die Bank:
Das Konto:
Angestellter:
Hauptprog:
[Java]
public class SimpleBankDemo {
public static void main(String[] args) {
Angestellter A1, A2, A3;
SimpleBank b = new SimpleBank();
Konto K1,K2,K3;
K1 = new Konto (30);
K2 = new Konto (50);
K3 = new Konto (100);
System.out.println("Vorher:");
b.kontostand(K1);
b.kontostand(K2);
b.kontostand(K3);
// Eine ringförmige Überweisung
A1 = new Angestellter(b, K1, K2, 20);
A2 = new Angestellter(b, K2, K3, 20);
A3 = new Angestellter(b, K3, K1, 20);
A1.start();
A2.start();
A3.start();
while(überweisung(A1,A2,A3)) System.out.println("In Arbeit...");
System.out.println("nachher:");
b.kontostand(K1);
b.kontostand(K2);
b.kontostand(K3);
}
public static boolean überweisung(Angestellter TA1,Angestellter TA2,Angestellter TA3) {
return (TA1.rdy & TA2.rdy & TA3.rdy) ? false : true;
}
}
[/code]
Im Hauptprogramm liegt mein eigentliches Problem, da ich mit der Methode "überweisung" abfragen möchte ob alle Angestellten bereits fertig sind. Da ich aber 3 Angestellte als Parameter übergebe , könnte ich die Funktion nicht benutzen wenn ich z.b. 2 oder 4 Angestellte habe.
Wie kann ich in dieser Funktion einfach abfragen , ob ALLE angestellten fertig sind ?
Vielen Dank im vorraus für die Hilfe !
Mit freundlichen Grüßen
Lucky66
ich arbeite momentan ein Multi-threading Beispiel durch. Es gibt eine Bank und mehrere Konten und Angestelle.
Das Objekt Bank enthält in dem Beispiel 3 Objekte vom Typ Konten und Objekte der Klasse Angestelle führen die Überweisungen durch -> Bei 3 Angestellten also 3 paralelle Überweisungen.
Hier zur Verdeutlichung:
Die Bank:
Java:
class SimpleBank {
public void überweisung(Konto Kvon,Konto Knach,int betrag) {
Kvon.sub(betrag);
Knach.add(betrag);
}
public void kontostand(Konto Kstand) {
System.out.println(Kstand.kkontoStand());
}
}
Das Konto:
Java:
class Konto {
int stand;
public Konto(int betrag) {
stand = betrag;
}
public synchronized void add(int betrag) {
int neuerBetrag;
neuerBetrag = stand;
neuerBetrag += betrag;
stand = neuerBetrag;
}
public synchronized void sub(int betrag) {
int neuerBetrag;
neuerBetrag = stand;
neuerBetrag -= betrag;
stand = neuerBetrag;
}
public synchronized int kkontoStand() {
return stand;
}
}
Angestellter:
Java:
class Angestellter extends Thread {
SimpleBank bank;
int betrag;
Konto Kvon,Knach;
boolean rdy=false;
public Angestellter(SimpleBank bank, Konto Kvon,
Konto Knach, int betrag) {
this.bank = bank;
this.Kvon = Kvon;
this.Knach = Knach;
this.betrag = betrag;
}
public void run() {ramm:
// Überweisung vornehmen
bank.überweisung(Kvon, Knach, betrag);
rdy=true;
System.out.println("rdy");
}
}
Hauptprog:
[Java]
public class SimpleBankDemo {
public static void main(String[] args) {
Angestellter A1, A2, A3;
SimpleBank b = new SimpleBank();
Konto K1,K2,K3;
K1 = new Konto (30);
K2 = new Konto (50);
K3 = new Konto (100);
System.out.println("Vorher:");
b.kontostand(K1);
b.kontostand(K2);
b.kontostand(K3);
// Eine ringförmige Überweisung
A1 = new Angestellter(b, K1, K2, 20);
A2 = new Angestellter(b, K2, K3, 20);
A3 = new Angestellter(b, K3, K1, 20);
A1.start();
A2.start();
A3.start();
while(überweisung(A1,A2,A3)) System.out.println("In Arbeit...");
System.out.println("nachher:");
b.kontostand(K1);
b.kontostand(K2);
b.kontostand(K3);
}
public static boolean überweisung(Angestellter TA1,Angestellter TA2,Angestellter TA3) {
return (TA1.rdy & TA2.rdy & TA3.rdy) ? false : true;
}
}
[/code]
Im Hauptprogramm liegt mein eigentliches Problem, da ich mit der Methode "überweisung" abfragen möchte ob alle Angestellten bereits fertig sind. Da ich aber 3 Angestellte als Parameter übergebe , könnte ich die Funktion nicht benutzen wenn ich z.b. 2 oder 4 Angestellte habe.
Wie kann ich in dieser Funktion einfach abfragen , ob ALLE angestellten fertig sind ?
Vielen Dank im vorraus für die Hilfe !
Mit freundlichen Grüßen
Lucky66
Zuletzt bearbeitet: