Abarbeitung abwarten

javahans

Neues Mitglied
Hallo,

ich habe folgendes Problem:

Es gibt z.B. eine Thread-Klasse, die regelmäßig (run()) nach Daten "Ausschau" hält. Wenn es neue Daten gibt, wird boolean renew auf true gesetzt. Wenn die neuen Daten geladen/eingearbeitet sind, wird renew auf false gesetzt.

Nun zum Problemfall: Es gibt in DERSELBEN Thread-Klasse auch eine public Methode, z.B. getDaten(String s). Diese Methode prüft zuerst, ob renew gesetzt ist, falls nicht, holt es die entsprechenden Daten.

Aber: Wenn renew gesetzt ist, soll es WARTEN, BIS DIE DATENEINARBEITUNG FERTIG IST (und renew wieder false ist).

Wie programmiere ich dieses Problem am besten?

Herzlichen Dank für Eure Hilfe!
javahans
 

Lumaraf

Bekanntes Mitglied
Man könnte das alternativ auch mit einem volatile CountDownLatch lösen.

Java:
private volatile CountDownLatch renew;

public void laden()
{
    renew=new CountDownLatch(1);
    try {
        // Daten laden ...
    } finally {
        renew.countDown();
    }
}

public Daten getDaten()
{
    renew.await();
    return ...;
}
 

javahans

Neues Mitglied
Hallo zusammen,

der CoundDownLatch() scheint toll zu sein - herzlichen Dank Lumaraf für den wertvollen Hinweis.

Ansonsten ist ja das Problem (so wie ich es sehe), dass ich beim Aufruf von z.B. this.wait() in der Methode, auch die run()-Methode, d.h. den eigenen Thread anhalte - er stolpert sozusagen über die eigenen Füße.

Stimmt das so?

Aber mit dem gesonderten CountDownLatch-Objekt ist das Problem wohl gut gelöst.

HG
javahans
P.S.: Ich warte noch ein wenig mit dem Schließen meiner Anfrage, vielleicht gibt's ja noch interessante Ideen... :)
 

Ähnliche Java Themen


Oben