Hey,
ich bin gerade in das Thema Threads eingestiegen und habe zur Aufgabe ein typisches “Producer / Consumer” Problem bekommen.
Meine Frage wäre, wie ich Informationen zwischen den beiden Threads austauschen kann.
Explizit hier :
Producer erstellt einen Vector(x,y) und der Consumer greift auf den Vector zu, bedient sich diesem und “cleared” ihn dann ( setzt seine Wert auf 0 ).
Wenn ich dem Thread aber versuche im Konstruktor den Vector zu übergeben ist er natürlich immer erst null…
Mein Ansatz:
Producer
import java.util.Random;
public class Producer implements Runnable
{
int x;
int y;
Random r = new Random();
Vector<Integer> vector;
public Producer()
{
}
synchronized Vector<Integer> getVector()
{
return vector;
}
synchronized void createNumbers()
{
x = r.nextInt(60);
y = r.nextInt(60);
System.out.println("Thread " + this.toString() + " created random numbers.");
}
synchronized void createVector()
{
vector = new Vector<Integer>(x,y);
System.out.println("Thread " + this.toString() + " created Vector.");
}
synchronized void clearVector()
{
vector = new Vector<Integer>(0,0);
System.out.println("Thread" + this.toString() + " cleared Vector.");
}
public void run()
{
System.out.println("Thread " + this.toString() + " started.");
createNumbers();
createVector();
}
}
public class Consumer implements Runnable {
private Vector<Integer> item;
public Consumer(Vector<Integer> vector)
{
item = vector;
}
synchronized void createGraphic(Vector<Integer> item2)
{
graphic(0,item2);
graphic(1,item2);
System.out.println("Thread " + this.toString() + " created graphic.");
}
synchronized void graphic(int x, Vector<Integer> vector)
{
for(int i = 0; i <= (Integer)vector.get(x);i++) // *1
{
System.out.print("*");
}
System.out.print("
");
}
public void run()
{
try {
Thread.sleep(1000);
} catch (InterruptedException e) {
}
System.out.println("Thread " + this.toString() + " started.");
createGraphic(item);
}
}