1. Dashboard
  2. Forum
    1. Unerledigte Themen
  3. Mitglieder
    1. Letzte Aktivitäten
    2. Benutzer online
    3. Team-Mitglieder
    4. Trophäen
    5. Mitgliedersuche
  4. Tutorial Bereich
  • Anmelden
  • Registrieren
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Lexikon
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Threads + Producer Consumer

  • fips
  • 8. November 2004 um 11:26
  • Unerledigt
  • fips
    3
    fips
    Mitglied
    Punkte
    70
    Beiträge
    9
    • 8. November 2004 um 11:26
    • #1

    Hallo bekomme ein einfaches Producer Consumer Programm nicht zum laufen mit Threads bzw. verhält es sich vollkommen falsch, wäre nett, könnte mir jemand helfen.

    Also es gibt ein Interface ProduceListener:

    public interface ProducerListener {

    public void itemReady(Producer producer);
    public void endOfProduction(Producer producer);

    }

    Dann eine Klasse Producer

    import java.lang.Thread;


    public class Producer extends Thread {

    private String id;
    private int count;
    private int item;
    private ProducerListener listener;

    public Producer(String id, int numberOfItems) {

    this.id = id;
    this.count = numberOfItems;

    }

    public void setProducerListener(ProducerListener listener) {

    this.listener = listener;
    }

    public int pickUpItem() {

    return this.item;
    }

    public String getId() {
    return this.id;
    }

    public void run() {

    int i;
    for (i=1;i<=this.count;i++) {

    /* Niemand darf unseren Produzer jetzt betreten, da dieser das Item produziert*/
    synchronized(this){

    this.item = i;
    /*Consumer aufwecken dass dieser Producer (this) nun fertig ist.*/

    this.listener.itemReady(this);

    try {
    // wait for Producer to put value

    this.wait();


    } catch (InterruptedException e) {

    }
    }
    }

    //this.listener.endOfProduction(this);
    }
    }

    Und ne klasse Konsumer :

    public class Consumer extends Thread implements ProducerListener{


    private Producer myProducer;
    private int itemP;
    private boolean available;

    public Consumer (Producer p1,Producer p2) {

    p1.setProducerListener(this);
    p2.setProducerListener(this);
    this.available = true;
    }

    public void itemReady(Producer producer) {

    this.myProducer = producer;
    this.notify();


    }

    public void endOfProduction(Producer producer){
    //synchronized(this) {
    // this.available =false;
    // this.notify();
    //}
    }

    public void run() {

    while (this.available ==true ) {


    synchronized(this.myProducer){

    try {
    // wait for Producer to put value

    this.myProducer.wait();

    } catch (InterruptedException e) {
    }

    this.itemP = this.myProducer.pickUpItem();


    this.myProducer.notifyAll();

    }
    System.out.println(this.myProducer.getId()+":"+this.itemP);


    }
    }
    }



    Leider funkt das alles gar nicht richtig: der Konsument hat praktisch 2 Produzenten, der Produzent nützt das Interface , um den Konsumenten bescheid zu geben, falls ein item produziert worden ist (ITem = Zahl in diesem Fall)
    Was mache ich da falsch ?

    L.g fips

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 8. November 2004 um 22:10
    • #2

    Bitte! Wenn du willst, dass sich das wer anschaut, dann mach dir doch wenigstens die Mühe, es so zu formatieren, dass man nicht Augekrebs kriegt...

  • Ringding
    11
    Ringding
    Mitglied
    Reaktionen
    12
    Punkte
    1.237
    Beiträge
    244
    • 8. November 2004 um 22:16
    • #3

    Wenn Consumer zu laufen beginnt, ist myProducer nicht gestzt.
    Was bringen die synchronized(this), wenn's sonst keine synchronized Methoden gibt? Soll das irgendwie das notify() absichern?

  • Maximilian Rupp 27. Dezember 2024 um 12:06

    Hat das Thema aus dem Forum Programmieren nach Entwicklung verschoben.

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!

Benutzerkonto erstellen Anmelden

Benutzer online in diesem Thema

  • 1 Besucher

Rechtliches

Impressum

Datenschutzerklärung