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
Jetzt mitmachen!
Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!