Liebes Forum,
ich versuche gerade mich mit den Threads in Java anzufreunden, aber irgendwie klappt es nicht so wie es soll. Ich habe hier ein Beispielprogramm bestehend aus der Klasse Lager, sowie den Klassen Produzent und Konsument die jeweils von der Klasse Thread abgeleitet wurden und Zugriff auf das Lager haben.
Dier Klasse Lager:
Der Produzent:
Der Konsument
Wenn ich das über eine DemoKlasse ausführe:
Dann bekomme ich leider immer nur gesagt: der Konsument muss warten
Scheint also was verkehrt zu sein
Vielen Dank schonmal fürs lesen
ich versuche gerade mich mit den Threads in Java anzufreunden, aber irgendwie klappt es nicht so wie es soll. Ich habe hier ein Beispielprogramm bestehend aus der Klasse Lager, sowie den Klassen Produzent und Konsument die jeweils von der Klasse Thread abgeleitet wurden und Zugriff auf das Lager haben.
Dier Klasse Lager:
Java:
public class Lager
{
// Ein Zähler für die Anzahl der Produkte im Lager
private int prodcnt = 0;
private boolean pause = false;
// Methode produzieren
public synchronized void produzieren()
{
if (pause == false)
{
try
{
wait();
}
catch (InterruptedException e) {}
prodcnt++;
System.out.println("Neues Produkt " + prodcnt + " hergestellt");
pause = true;
notifyAll();
}
else System.out.println("Der Produzent muss warten");
}
// Methode konsumieren
public synchronized void konsumieren()
{
if (pause == true)
{
try
{
wait();
}
catch (InterruptedException e) {}
prodcnt--;
System.out.println("Habe Produkt Nummer " + prodcnt + " entnommen");
pause = false;
notifyAll();
}
else System.out.println("Der Konsument muss warten.");
}
}
Der Produzent:
Java:
public class Produzent extends Thread
{
Lager lagerObjekt;
public Produzent(Lager lagerObjekt)
{
this.lagerObjekt = lagerObjekt;
}
public void run()
{
for (int i = 0; i < 10; i++)
{
lagerObjekt.produzieren();
try
{
sleep((int)(Math.random()*1000));;
}
catch (InterruptedException e) {}
}
}
}
Der Konsument
Java:
public class Konsument extends Thread
{
Lager lagerObjekt;
public Konsument(Lager lagerObjekt)
{
this.lagerObjekt = lagerObjekt;
}
public void run()
{
for (int i = 0; i < 10; i++)
{
lagerObjekt.konsumieren();
try
{
sleep((int)(Math.random()*1000));;
}
catch (InterruptedException e) {}
}
}
}
Wenn ich das über eine DemoKlasse ausführe:
Java:
public class Demo
{
public static void main(String args[])
{
// Lagersklaven für die Arbeit erstellen und an den produzierenden
// und den konsumierenden Thread übergeben.
Lager l = new Lager();
Produzent p = new Produzent(l);
Konsument k = new Konsument(l);
//Threads starten
p.start();
k.start();
}
}
Dann bekomme ich leider immer nur gesagt: der Konsument muss warten
Scheint also was verkehrt zu sein
Vielen Dank schonmal fürs lesen