Abfragen ob Threads fertig

lucky66

Neues Mitglied
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:
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:

hauptDev

Bekanntes Mitglied
Ich denke das wäre ein Fall für den ExecutorService
und der Methode invokeAll.
ExecutorService (Java Platform SE 7 )

Funktioniert dann aber nicht mit Thread, sondern mit Future (letzteres ist ungefähr das gleiche nur mit der Methode call statt run und einem Rückgabewert).

Ob das mit den normalen Threads funktioniert weiß ich allerdings nicht (zumindest in einer besseren Form als alle zu fragen oder sich bescheid geben zu lassen)
 

Thallius

Top Contributor
Ich würde das komplett anders angehen.

Mach Doch in deine Controllerklasse eine Mathode kontoDidFinish() oder so. Du gibst dem Konto dann eine Referenz auf deine Hauptklasse und die Kontoklasse ruft dann diese Methode in der Hauptklasse auf wenn sie fertig ist. Die Kontoklasse bekommt einen Status Arbeitet/Waret oder so und wenn du nun jedes Konto z.B. in einer ArrayList<Konto> in der Hauptklasse verwahrst, kannst du wunderbar dort den Status abfragen und wenn alle fertig sind eine Methode alleFertig() aufrufen.

Gruß

Claus
 

lucky66

Neues Mitglied
Hallo,

Danke euch beiden für die Antworten, ich hoffe ihr hattet schöne Feiertage und seit gut ins neue Jahr gekommen.
Tut mir leid, dass ich mich solange nicht gemeldet habe , aber Feiertage + Stress in der Uni :/

Mh...Ich habe eigentlich gehofft , dass es eine Möglichkeit gibt in der folgenden Funktion alle "Angestellten" anzusprechen und nicht so primitiv wie ich die rdy-Werte für jeden abzufragen :(

Code:
public static boolean überweisung(Angestellter TA1,Angestellter TA2,Angestellter TA3) {
        return (TA1.rdy & TA2.rdy & TA3.rdy) ? false : true;
      }

mfg Lucky66
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Threads Parallelisierte DB-Abfragen mit variabler Anzahl an Threads Allgemeine Java-Themen 4
M Zahl aktiver Threads einer Gruppe verlässlich abfragen Allgemeine Java-Themen 3
C Threads abfragen, aber wie? Allgemeine Java-Themen 3
ReinerCoder Case statt if else Abfragen?! Allgemeine Java-Themen 8
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
VfL_Freak KeyEvent.VK_TAB im KeyListener abfragen Allgemeine Java-Themen 13
cool_brivk24 Variablen abfragen von Boolean von anderer Klasse Allgemeine Java-Themen 12
B Generelle Frage bei einer Webanwendung / Reduzierung von DB Abfragen Allgemeine Java-Themen 1
E Status eines USB Mikrofon abfragen Allgemeine Java-Themen 2
D TextBox Abfragen Allgemeine Java-Themen 2
kodela aktuelle Position des Hauptfensters abfragen Allgemeine Java-Themen 12
J Tonhöhe & Lautstärke abfragen? Allgemeine Java-Themen 3
K USB infos unter Linux abfragen? Allgemeine Java-Themen 2
MiMa Variableninhalte dynamisch abfragen Allgemeine Java-Themen 12
A Erste Schritte If Abfragen + Scanner Allgemeine Java-Themen 7
Z AD Abfragen mit Java! Allgemeine Java-Themen 3
chuxXo BasicPlayer - Beendigung Abfragen (Allgemein) Allgemeine Java-Themen 21
P Name der Parent Klasse abfragen Allgemeine Java-Themen 8
H In windowClosing() abfragen, ob STRG gedrückt wurde Allgemeine Java-Themen 8
M Aktuelle Systemzeit und Datum abfragen Allgemeine Java-Themen 2
M CapsLock abfragen wenn Fenster wieder aktiviert wird Allgemeine Java-Themen 5
P Variablen Werte der Objektvariablen mit getFields() abfragen Allgemeine Java-Themen 2
P Klassen Template-Klasse für Datenbank-Abfragen erstellen Allgemeine Java-Themen 2
J XML Inhalt von Web abfragen Allgemeine Java-Themen 6
D Von mehreren Objekten eine Eigenschaft abfragen Allgemeine Java-Themen 11
S HTTP Filmgenre aus dem Internet abfragen! Allgemeine Java-Themen 6
R Was ist hier falsch? Abfragen Allgemeine Java-Themen 3
E Unique Ids abfragen? Allgemeine Java-Themen 5
Airwolf89 Wahrheitstabelle abfragen Allgemeine Java-Themen 3
M ständiges abfragen einer .txt Allgemeine Java-Themen 2
S Zeitserver Abfragen und in Date speichern Allgemeine Java-Themen 5
V Hostname abfragen gelingt nicht immer Allgemeine Java-Themen 2
H Windows abfragen Allgemeine Java-Themen 2
M Enter Taste in Konsole abfragen Allgemeine Java-Themen 2
N IP-Adresse Eingabe abfragen? Allgemeine Java-Themen 4
J Mit Scanner-Klasse eine Datei zeilenweise einlesen und nur bestimmte Zeichen abfragen Allgemeine Java-Themen 11
C Batchdatei ausführen und Ergebnisse abfragen Allgemeine Java-Themen 8
M Vermeiden von instanceof Abfragen Allgemeine Java-Themen 3
M SQL-Installation abfragen Allgemeine Java-Themen 14
Z Wetterdaten abfragen Allgemeine Java-Themen 5
J Zweiter Prozess der alle x Sekunden etwas abfragen soll Allgemeine Java-Themen 2
R Zugriffsrechte abfragen Allgemeine Java-Themen 2
R boolean im Bean abfragen Allgemeine Java-Themen 18
G Checkboxen abfragen,Auswahl sichern, JTable laden Allgemeine Java-Themen 2
G Mausbewegung abfragen? Allgemeine Java-Themen 2
C Binärbereich einer Variablen abfragen Allgemeine Java-Themen 8
S Datenbank Abfragen mit großen Datenmengen Allgemeine Java-Themen 22
H Mit Java Desktop abmessungen height/width abfragen Allgemeine Java-Themen 20
H Sekunden messen wie lange h.ibernate/jdbc abfragen brauchen Allgemeine Java-Themen 7
G Abfragen des types Allgemeine Java-Themen 7
I Am System angemeldeten Benutzer abfragen Allgemeine Java-Themen 11
P verfügbare COM Schnitstellen abfragen Allgemeine Java-Themen 4
P <null> in einer DB abfragen Allgemeine Java-Themen 4
S Wie Carriage Return Line Feed abfragen. Allgemeine Java-Themen 6
T Hibernate Criteria Queries - Abfragen von Collection-Members Allgemeine Java-Themen 2
E Viele if Abfragen auf viele Strings --> Alternative zu if Allgemeine Java-Themen 8
T Tastatur global abfragen Allgemeine Java-Themen 2
M Map gezielt abfragen? Allgemeine Java-Themen 5
MQue Vereinfachung von if- Abfragen Allgemeine Java-Themen 21
Chris_1980 Mausbewegung abfragen Allgemeine Java-Themen 4
E Events von inneren Klasse abfragen Allgemeine Java-Themen 7
B jre version in der html-datei für ein applet abfragen Allgemeine Java-Themen 5
S Prozessorauslastung abfragen Allgemeine Java-Themen 2
C Tastatureingabe in einem Frame abfragen Allgemeine Java-Themen 2
R Thread.sleep - abfragen Allgemeine Java-Themen 4
S Name der ausführenden jar-Datei abfragen Allgemeine Java-Themen 11
S Abfragen der Komponente bei actionperformed Allgemeine Java-Themen 2
A Dateistatus abfragen und Datei löschen sobald kein Zugriff Allgemeine Java-Themen 7
G JavaMail - Message vom Server, wie abfragen? Allgemeine Java-Themen 2
J Name des aktuell aktiven Windows-Fensters abfragen? Allgemeine Java-Themen 4
T Bittorrent TRACKER abfragen mit JAVA Allgemeine Java-Themen 4
J ArrayList mit SQL abfragen ? Allgemeine Java-Themen 6
thE_29 ? in einem String abfragen Allgemeine Java-Themen 7
rode45e Java Threads Allgemeine Java-Themen 4
M Threads Allgemeine Java-Themen 1
L Threads Threads in Chatroom Allgemeine Java-Themen 30
berserkerdq2 run-methode eines Threads so programmieren, dass 30x die Sekunde etwas ausgeführt wird. Allgemeine Java-Themen 44
berserkerdq2 Threads, wie genau läuft das in Java ab? (Ich kann Threads erstellen und nutzen, nur das Verständnis) Allgemeine Java-Themen 6
CptK Backpropagation parallelisieren: Kommunikation zwischen den Threads Allgemeine Java-Themen 7
J Eine Frage zu den Threads und Task Allgemeine Java-Themen 1
W Wieviele Threads sind sinnvoll? Allgemeine Java-Themen 8
W Alternative für Threads Allgemeine Java-Themen 6
V Threads Probleme beim Aufrufen von Methoden einer anderen Klasse (Threads) Allgemeine Java-Themen 14
T Multithreading: Wie viele Threads sollte ich erstellen? Allgemeine Java-Themen 12
G Threads vom Mainprogramm steuern Allgemeine Java-Themen 8
S BlockingQueue mit dynamischer Anpassung der Anzahl von Producer und Consumer Threads Allgemeine Java-Themen 1
x46 Threads Threads anhalten Allgemeine Java-Themen 1
J Threads verbessern die Performance NICHT ? Allgemeine Java-Themen 8
W Threads Problem Allgemeine Java-Themen 15
T Threads Tic Tac Toe mit Threads Allgemeine Java-Themen 1
M Threads über Kommandozeile Allgemeine Java-Themen 5
mrbig2017 Threads Chat Programm mit Threads? Allgemeine Java-Themen 2
J Threads - java.lang.IllegalThreadStateException Allgemeine Java-Themen 6
J Internet Broswer in Threads öffnen Allgemeine Java-Themen 1
B Threads Multithreading Threads sollen warten Allgemeine Java-Themen 12
N 1000 MQTT Messages die Sekunde - 1000 Threads erstellen ? Allgemeine Java-Themen 10
D Threads Parallel laufende Threads Allgemeine Java-Themen 4
J Unvorhersehbares Verhalten - benutze ich die falsche Bedingungsprüfung oder brauche ich Threads? Allgemeine Java-Themen 12
D Eine Forschleife mit Threads abarbeiten um es zu schneller zu machen. Ist das möglich? Allgemeine Java-Themen 20
S Wie kann ich eine kleine Stelle in meinem Code mit multiplen Threads abarbeiten..? Allgemeine Java-Themen 20

Ähnliche Java Themen

Neue Themen


Oben