Multi Threading

BadBat

Aktives Mitglied
Hi zusammen,
ich stecke grade in den Prüfungsvorbereitungen und mir ist eine Sache schleierhaft... vielleicht könnte mir da einer bei helfen.
Aufgabe:
Wir betrachten den JAVA-Synchronisationsmechanismus. In dem folgenden Codeausschnitt wird die Methode m1 von genau einem Thread aufgerufen, die Methode m2 von genau drei Threads. Der Startzeitpunkt und die Startreihenfolge der Threads sind unbekannt (also beliebig).
Java:
public class Aufgabe5 {
    private boolean next;
   
    public Aufgabe5 () { // Konstruktor
        next = false; }
    public synchronized void m1() {
        System.out.println(“1”);
        next = true;
        notify(); }
    public synchronized void m2() {
         while (next == false) {
                try { wait(); }
                catch (InterruptedException e) { … }
          }
          System.out.println(“2”); }
}

Fragestellung:
Ist die durch m1 und m2 erzeugte Bildschirmausgabe (Konsolenausgabe) eindeutig, d.h. unabhängig von der Ausführungsreihenfolge der Threads immer gleich? Begründen Sie Ihre Antwort!

Antwort:
Nein, da durch die Verwendung von „notify“ nur ein Thread in der Wait-Queue des Objekt-Monitors aktiviert wird. In Abhängigkeit davon, wie viele m2-Threads vor dem m1-Thread bereits ausgeführt wurden und damit anschließend noch blockiert in der Wait-Queue liegen bleiben, könnte die Ausgabe 12, 122 oder 1222 lauten (mit Zeilenumbrüchen).

Meine Frage:
Wenn wie in der Antwort beschrieben mit notify() nur EIN Thread aus der wait() geholt wird, wie kommt man dann auf 122 oder 1222.

Vielen Dank schon mal im voraus :)
 

temi

Top Contributor
Wenn next == true (also nach dem Aufruf von m1), dann wird das while gar nicht ausgeführt und sofort die Ausgabe "2" gemacht.
 

Flown

Administrator
Mitarbeiter
Du hast 4 Threads. Bei der Aufrufreihenfolge:
m2, m2, m1, m2 bekommst du die Ausgabe: 122
Der erste oder zweite Thread verhungert, da nur einer "aufgeweckt" wird. Der letzte Thread läuft einfach durch die Methode.
 

Ähnliche Java Themen

Neue Themen


Oben