Habe ich die Aufgabe richtig gelöst?

berserkerdq2

Bekanntes Mitglied
Hi, hier soll ich bei der Aufgabe lock und conditions nutzen, es wurde beschrieben wie, ich bin mir nur nicht sicher, ob ich es richtig gemacht habe:

Bei den beiden Methoden int und sum stehen die Aufgaben, hier der Code ohne Bearbeitung:

HTML:
public class LockedDataObject extends DataObject {

    /** Number of current readers */
    int noReaders;

     /** True, if writer is currently waiting or writing */
    boolean writer;

    /**
     * Condition variable to put to sleep or wake up the recorder.
     */
    Condition condWrite;

    /** Condition variable for putting readers to sleep or waking them up */.
    Condition condRead;

   /**
     * Lock to protect all upper variables. Before accessing any of the
     * variables is accessed, this lock may need to be acquired. The
     * lock should *only be acquired if it is absolutely necessary for correct * execution.
     * execution. This is with a changing access
     * only if other threads can read or write the corresponding variable * at the same
     *time.
     * can read or write the corresponding variable at the same time. In the case of a
     *reading access
     * the lock should not be acquired if other threads can only read * the variable at the
     *same time, but not write it.
     * read, but not write, access to the corresponding variable at the same time.
     * at the same time.
     */

    ReentrantLock lock;

    public LockedDataObject() {
        this.lock = new ReentrantLock();
        this.condRead = lock.newCondition();
        this.condWrite = lock.newCondition();
        this.noReaders = 0;
        this.writer = false;
    }

    public int sum() {
        // Note the correct use of the lock variable throughout.
        // "lock". Acquire the lock only if it is absolutely necessary.

        // 1. as long as a writer is waiting or writing, sleep.

        // 2. increase the number of readers by 1.


        // 3. sum up
        int sum = super.sum();

        // 4. decrease the number of readers and, if necessary, wake up the writers.
        
        // 5. return the total
        return sum;
    }

    public void randomSwap() {
        // Note the correct use of the lock variable throughout.
        // "lock". Acquire the lock only if absolutely necessary.

        // 1. indicate that a writer is waiting.

        // 2. put to sleep as long as at least one reader is still active.

        // 3. swap elements
        super.randomSwap();

        // 4. indicate that no writer is waiting/writing anymore and
        // wake up readers if necessary.
    }
}

Code:
  public int sum() {
        // Note the correct use of the lock variable throughout.
        // "lock". Acquire the lock only if it is absolutely necessary.

        // 1. as long as a writer is waiting or writing, sleep.
        while(writer==true) {
            lock.lock();
        }
        // 2. increase the number of readers by 1.
        noReaders=noReaders+1;

        // 3. sum up
        int sum = super.sum();

        // 4. decrease the number of readers and, if necessary, wake up the writers.
        noReaders=noReaders-1;
        try {
            condWrite.await();
        } catch (InterruptedException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        // 5. return the total
        return sum;
    }

    public void randomSwap() {
        // Note the correct use of the lock variable throughout.
        // "lock". Acquire the lock only if absolutely necessary.

        // 1. show/indicate that a writer is waiting.
        
        //keine Ahnung was man damit meint, dass ich zeigen soll, dass ein writer wartet
        
        // 2. put to sleep as long as at least one reader is still active.
        while(writer) {
            lock.lock();
        }
        // 3. swap elements
        super.randomSwap();

        // 4. indicate that no writer is waiting/writing anymore and
        // wake up readers if necessary.
        if(writer==false) {
            try {
                condWrite.signal();
            } catch (InterruptedException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }
 

Neumi5694

Top Contributor
Hast du das Verhalten denn mal getestet? Passiert das, was vorgegeben ist?

"writer" wird nie auf true gesetzt, es würde mich wundern, wenn alles klappen würde.


ps. Nicht verhaltensrelevant, nur code-Verbesserung
1.
Java:
while(writer==true) {
}
//ersetzen durch
while(writer) {
}


//und
if(writer==false) {
}
//ersetzen durch
if(!writer) {
}

2. benenne die Variable "writer" um nach "writing". "writer" klingt danach, als ob das damit bezeichnete Objekt etwas machen würde.

3. Deine Variablen sind nicht private sondern package protected, das ist im Normalfall nicht gut. Besser: Setze sie auf private und schreib getter und setter zum Auslesen und Setzen. So kannst du auch z.b. auch auf das Setzen reagieren.
 
Zuletzt bearbeitet:

berserkerdq2

Bekanntes Mitglied
Danke, aber bekomme das irgendwie trotzdem nicht hin. Ich habe noch eine Klasse Reader und Writer, die sind public und erben von Threads, muss ich die vielleicht hier im Code auch irgendwie verwenden?
 

Neumi5694

Top Contributor
Das war auch nicht die Lösung des Problems, nur ein kleiner Tip.
Aber wenigstens ist jetzt mal die Frage beantwortet, ob du es richtig gemacht hast: Nein :)

Nachdem ich deine Klassen nicht kenne (vor allem DataObject) kann ich nur raten, was das Ganze überhaupt bezwecken soll und wie die Vorgabe umzusetzen wäre.
Meine Annahme wäre, dass die Zugriffsmethoden von DataObject überschrieben werden müssen und geprüft werden muss, ob Änderung gerade zulässig ist oder nicht. Falls der Thread warten muss, dann ist das einzubauen. Das wäre so die übliche Vorgehensweise bei LockedDingsbums-Klassen.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
berserkerdq2 Habe ein Spiel entwickelt, dass immer in der 4 Runde einen cast-Fehler erhält Java Basics - Anfänger-Themen 3
berserkerdq2 Habe eine Klasse, welche public ist, diese hat eine public Methode, die nicht static ist. Wenn ich nun versuche aufzurufen Probleme? Java Basics - Anfänger-Themen 8
berserkerdq2 Habe zwei exceptions, welche ist ein Kommunikationsfehler und welche ein Ausgabefehler? Java Basics - Anfänger-Themen 4
berserkerdq2 Wann soll ich den Stream schließen, wenn ich das in einer Methode habe? Java Basics - Anfänger-Themen 8
O Ich habe einen String und soll mit matches schauen, ob ein Buchstabe zu einer geraden ANzahl im String vorkommt, wie soll das gehen? Java Basics - Anfänger-Themen 7
EchtKeineAhnungManchmal hallo habe ein Problem mit einer Datei -> (Zugriff verweigert) Java Basics - Anfänger-Themen 4
Aqtox Hallo ich muss für die Schule ein Wuerfell Duell erstellen jedoch habe ich ein fehler Java Basics - Anfänger-Themen 4
I DecimalFormat in Zahlenformat für Währung, habe 7,99, bekomme aber 7 Java Basics - Anfänger-Themen 4
M Was habe ich hier falsch, dass wenn ich z.B.: 11 eingebe mir false zurück gegeben wird? Java Basics - Anfänger-Themen 2
Kapfski Was habe ich falsch gemacht? Hilfe! Java Basics - Anfänger-Themen 17
T Ich habe eine Variabel die nicht Methoden übergreifend ist. Kann mir jemand Helfen :) Java Basics - Anfänger-Themen 5
I Ich habe ein Problem Java Basics - Anfänger-Themen 3
F Habe ein problem mit dem ActionListener Java Basics - Anfänger-Themen 3
I wieder mit einer Umwandelung habe ich Problem (diesmal von char Array zu char) Java Basics - Anfänger-Themen 1
A Ich habe das Gefühl etwas grundlegendes falsch zu machen Java Basics - Anfänger-Themen 6
V Erste Schritte Habe Fragen zu der For und While Schleife als auch Inkrement und Dekrement Java Basics - Anfänger-Themen 4
E Habe ein Problem Java Basics - Anfänger-Themen 10
JavaNewbie2.0 Habe ein frage wie man etwas macht. Java Basics - Anfänger-Themen 13
A Methoden Habe ein Problem bei folgender Programmierung Java Basics - Anfänger-Themen 15
Z Was habe ich davon mit einem Datentyp verschiedene Instanzen zu haben? Java Basics - Anfänger-Themen 6
B Erste Schritte Way of life ohne import - Habe Beispiel, macht Unfug Java Basics - Anfänger-Themen 21
J Java: Was habe ich falsch gemacht? Java Basics - Anfänger-Themen 4
Thallius String und \n. Habe wohl gerade Brett vorm Kopf Java Basics - Anfänger-Themen 13
G Umgebungsvariable Hallo Ich habe ein Problem mit der Umgv Java Basics - Anfänger-Themen 9
F String.replaceAll() funktioniert nicht richtig oder habe ich den falschen Regex?? Java Basics - Anfänger-Themen 3
C JDK installieren Habe ein Problem bei Java install Java Basics - Anfänger-Themen 4
J Habe problem mit Java Java Basics - Anfänger-Themen 2
S Habe mist gebaut.. ^^ Java Basics - Anfänger-Themen 4
I Habe keine Idee was ich als Anfänger programmieren kann. Java Basics - Anfänger-Themen 4
K Habe ich ein Synchronisationsproblem ? Java Basics - Anfänger-Themen 25
B Warum kommt immer die 0 als Ergebnis? Was habe ich falsch gemacht? Java Basics - Anfänger-Themen 18
E Habe java. Datei wie ausführen ? Java Basics - Anfänger-Themen 9
B Habe einen Fehler Java Basics - Anfänger-Themen 3
G Habe ein Problem mit syn-Editor ( beim compilieren) Java Basics - Anfänger-Themen 4
U Habe meine .class files gelöscht. Java Basics - Anfänger-Themen 3
S Taschenrechner programmieren und habe null Ahnung Java Basics - Anfänger-Themen 22
S Ich habe ein kleines Problem mit meinem Übungsprogramm Java Basics - Anfänger-Themen 7
G habe ein Catch problem Java Basics - Anfänger-Themen 7
X Habe Set, möchte List Java Basics - Anfänger-Themen 3
W Applet starten - ich habe keine ahnung Java Basics - Anfänger-Themen 17
G Habe bei String kein split()? Java Basics - Anfänger-Themen 7
K Brauche nur Tipps Leute habe keine plan wie ich dass machen Java Basics - Anfänger-Themen 4
R Habe ein Problem und eine Frage Java Basics - Anfänger-Themen 19
P Habe da ein Problem mit Arrays! Bitte um Hilfe Java Basics - Anfänger-Themen 2
A Gleichungssystem: Ich habe es probiert! Java Basics - Anfänger-Themen 4
H habe keine main Java Basics - Anfänger-Themen 9
J Habe gerade erst mit Java begonnen - Frage zu JTabbedPane Java Basics - Anfänger-Themen 3
ven000m Rauten "Stern" zeichnen, hälfte habe ich zweite? Java Basics - Anfänger-Themen 2
G Habe Fragen zu der Programmierung eines Matheprogramms Java Basics - Anfänger-Themen 5
T HILFE! Ich habe keinen Plan mehr! Java Basics - Anfänger-Themen 16
M Habe ein Problem mit dem Konstruktor!Wer kann helfen? Java Basics - Anfänger-Themen 15
Z Warum habe ich eine ArrayIndexOutOfBoundsException? Java Basics - Anfänger-Themen 2
Jere58 Aufgabe zu Mustern Java Basics - Anfänger-Themen 1
M Interfaces Aufgabe Java Basics - Anfänger-Themen 2
lrnz22 Java-Basics-Aufgabe Java Basics - Anfänger-Themen 8
Justin4687 Benötige Hilfe bei folgender Aufgabe Java Basics - Anfänger-Themen 2
A Erste Schritte Aufgabe mit while Schleife Java Basics - Anfänger-Themen 11
S Hilfe zu einer Aufgabe Java Basics - Anfänger-Themen 5
M Java Programmierung Aufgabe Anfänger Java Basics - Anfänger-Themen 1
R Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
Mikejr Java Berg aufgabe Java Basics - Anfänger-Themen 6
frager2345 Aufgabe Hash Objekt Elemente ausgeben Java Basics - Anfänger-Themen 2
D Hilfe bei einer Aufgabe mit for-Schleife Java Basics - Anfänger-Themen 6
Neuling47 Ich zerbreche mit den kopf an einer Aufgabe Java Basics - Anfänger-Themen 61
G Fragen zu Kompelierfehler in Aufgabe. Java Basics - Anfänger-Themen 25
Robert_Klaus Hamster java Simulation Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
milan123 das ist meine aufgabe ich hab das problem das bei mir Wenn ich die Richtung der Linien verändern will und drei davon sind richtig, verändere ich die 4 Java Basics - Anfänger-Themen 3
M Verständins Problem bei Aufgabe Java Basics - Anfänger-Themen 4
T Informatik Studium Aufgabe Java Basics - Anfänger-Themen 4
T Aufgabe Informatik Studium Java Basics - Anfänger-Themen 10
I matrix aufgabe Java Basics - Anfänger-Themen 22
J Brauche Hilfe bei for-each Aufgabe Java Basics - Anfänger-Themen 1
9 Aufgabe Bruttorechner Java Basics - Anfänger-Themen 14
N Fehler im Code (Aufgabe für Anfänger) Java Basics - Anfänger-Themen 11
J Brauche Hilfe bei Aufgabe Java Basics - Anfänger-Themen 4
J boolean aufgabe Java Basics - Anfänger-Themen 9
D Snake-Spiel ähnliche Aufgabe Hilfe Java Basics - Anfänger-Themen 3
M Hilfe - Array Aufgabe Java Basics - Anfänger-Themen 8
StevenGG Aufgabe im Studium Java Basics - Anfänger-Themen 36
G Strings auf Gleichheit prüfen - Aufgabe vom Prof. Java Basics - Anfänger-Themen 5
S Schulaufgabe - verstehe leider die Aufgabe nicht Java Basics - Anfänger-Themen 4
Leo0909 Ich brauche Hilfe bei dieser Aufgabe Java Basics - Anfänger-Themen 2
R Eclipse Aufgabe Java Basics - Anfänger-Themen 4
J OOP-Aufgabe Java Basics - Anfänger-Themen 15
Helix19 Informatik Grundkurs (Haus-)Aufgabe Java Basics - Anfänger-Themen 5
P eine kleine Aufgabe mit Audio Java Basics - Anfänger-Themen 1
TimoN11 Verständnisfrage bei Aufgabe Java Basics - Anfänger-Themen 2
TimoN11 Java spezielle Suchprobleme - Aufgabe Java Basics - Anfänger-Themen 5
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 2
M Könnte mir jemand diese Aufgabe erklären? Java Basics - Anfänger-Themen 9
dieter000 Aufgabe Hilfe Java Basics - Anfänger-Themen 18
jonathanpizza Hilfe bei einer Aufgabe Java Basics - Anfänger-Themen 5
Q Hilfe auf Aufgabe(Matrixmultiplikation) Java Basics - Anfänger-Themen 1
jonathanpizza Hilfe bei der Aufgabe Java Basics - Anfänger-Themen 19
justemii Gehalt berechnen - Aufgabe Java-Programm Java Basics - Anfänger-Themen 9
C Fernseher-Aufgabe (Methoden, Klassen und Objekte) Java Basics - Anfänger-Themen 63
C Rechnungen-Aufgabe Java Basics - Anfänger-Themen 18
C Biene-Aufgabe Java Basics - Anfänger-Themen 2
K Algorithmen und Datenstrukturen Programmier Aufgabe Java Basics - Anfänger-Themen 10
M Verständnisfrage zu eine Online Aufgabe Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben