1. Weiterleitung zu NetzLiving.de
  2. Forum
    1. Unerledigte Themen
  3. zum neuen Forum
  • Anmelden
  • Suche
Dieses Thema
  • Alles
  • Dieses Thema
  • Dieses Forum
  • Seiten
  • Forum
  • Erweiterte Suche
  1. Informatik Forum
  2. Webmaster & Internet
  3. Entwicklung

Threads + Producer Consumer

  • fips
  • 8. November 2004 um 11:26
  • Unerledigt
Hallo zusammen,

das Informatik-Forum geht in den Archivmodus, genaue Informationen kann man der entsprechenden Ankündigung entnehmen. Als Dankeschön für die Treue bekommt man von uns einen Gutscheincode (informatikforum30) womit man bei netzliving.de 30% auf das erste Jahr sparen kann. (Genaue Infos sind ebenfalls in der Ankündigung)

Vielen Dank für die Treue und das Verständnis!
  • fips
    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
    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
    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.

  1. Datenschutzerklärung
  2. Impressum