Also, mal wieder ne Aufgabe aus der Uni wo ich häng, hab das auch schon bisl umgestellt aber iwie will das nicht wie ich will ^^
Ist ersma son Standart Erzeuger Verbraucher Beispiel, aber irgendwie will der nicht verbrauchen ;(
das wait hatte ich schon an vielen stellen aber entweder wird nix verbraucht oder ich bekomm ne java.lang.IllegalMonitorStateException
hoffe ihr könnt mir helfen. Runnable soll benutzt werden, also keine Vererbung von Thread. und ich will grade mit dem wait und notify das richtig verstehen, weil die aufgabe noch erweitert wird, das mehrere verbraucher sich zufällig aus dem vector bedienen, dafür ist das ja genau das richtige wenn ich jetz nicht total falsch liege oder? ^^
Ist ersma son Standart Erzeuger Verbraucher Beispiel, aber irgendwie will der nicht verbrauchen ;(
Code:
package supermarkt;
import java.util.Vector;
public class Erzeuger implements Runnable{
private Vector<String> kunden;
public Erzeuger(Vector<String> v)
{
this.kunden=v;
}
public synchronized void erzeuge()
{
String s = "Kunde "+ (int) (Math.random()*100);
System.out.println(s + " erzeugt!");
this.kunden.add(s);
this.notify();
}
@Override
public void run()
{
try
{
while(true)
{
this.erzeuge();
Thread.sleep((long) (Math.random()*2));
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Code:
package supermarkt;
import java.util.Vector;
public class Verbraucher implements Runnable{
private Vector<String> kunden;
public Verbraucher(Vector<String> v)
{
this.kunden=v;
}
@Override
public void run()
{
try
{
while(true)
{
if(this.kunden.size()>0)
{
this.verbrauche();
Thread.sleep((long) (6+Math.random()*4));
}
}
}
catch(Exception e)
{
e.printStackTrace();
}
}
public synchronized void verbrauche()
{
try
{
this.wait();
System.out.println(this.kunden.get(0) + " verbraucht");
this.kunden.remove(0);
}
catch(Exception e)
{
e.printStackTrace();
}
}
}
Code:
package supermarkt;
import java.util.Vector;
public class Supermarkt {
public static void main(String[] args)
{
Vector<String> kunden = new Vector<String>();
Erzeuger e = new Erzeuger(kunden);
Verbraucher v = new Verbraucher(kunden);
Thread t1 = new Thread(e);
Thread t2 = new Thread(v);
t1.start();
t2.start();
}
}
das wait hatte ich schon an vielen stellen aber entweder wird nix verbraucht oder ich bekomm ne java.lang.IllegalMonitorStateException
hoffe ihr könnt mir helfen. Runnable soll benutzt werden, also keine Vererbung von Thread. und ich will grade mit dem wait und notify das richtig verstehen, weil die aufgabe noch erweitert wird, das mehrere verbraucher sich zufällig aus dem vector bedienen, dafür ist das ja genau das richtige wenn ich jetz nicht total falsch liege oder? ^^
Zuletzt bearbeitet: