Hallo zusammen,
um es vorweg zu nehemen, ich programmiere unter WinXP, mit dem jdk1.5.0_03 und Eclipse.
Ich arbeite mich gerade durch das Tutorial über Threads auf java.sun.com.
Nachdem man dort eine eigene Struktur gewerkelt hat, um Daten synkronisiert ziwschen zwei Threads auszutauschen, wird nun die BlockingQueue aus java.util.concurrent eingeführt, die exakt diese Aufgabe übernehmen soll
java.sun.com/docs/books/tutorial/essential/threads/datastructures.html
Allerdings funktioneriert die in dem Beispiel benutzte put() methode nicht, Eclipse sagt mir: The method put(Object) in the type BlockingQueue is not applicable for the arguments (int).
Ich habe mir selber einen Consumer gebaut, aber auch die take() Methode, die ich dort verwende, schlägt fehl:
Type mismatch: cannot convert from Object to int
Ich sehe gerade den Fehler nicht, aber ich halte es für unwahrscheinlich, daß die Jungs von Sun so einen Fehler in ihrer Doku haben. Stimmt vielleicht mit meiner Installation, oder mit Eclipse etwas nicht?
Hier der Quellcode, meiner beiden Klassen:
Producer:
Consumer:
Jede Idee ist mir wilkommen.
Gruß
Kolja
um es vorweg zu nehemen, ich programmiere unter WinXP, mit dem jdk1.5.0_03 und Eclipse.
Ich arbeite mich gerade durch das Tutorial über Threads auf java.sun.com.
Nachdem man dort eine eigene Struktur gewerkelt hat, um Daten synkronisiert ziwschen zwei Threads auszutauschen, wird nun die BlockingQueue aus java.util.concurrent eingeführt, die exakt diese Aufgabe übernehmen soll
java.sun.com/docs/books/tutorial/essential/threads/datastructures.html
Allerdings funktioneriert die in dem Beispiel benutzte put() methode nicht, Eclipse sagt mir: The method put(Object) in the type BlockingQueue is not applicable for the arguments (int).
Ich habe mir selber einen Consumer gebaut, aber auch die take() Methode, die ich dort verwende, schlägt fehl:
Type mismatch: cannot convert from Object to int
Ich sehe gerade den Fehler nicht, aber ich halte es für unwahrscheinlich, daß die Jungs von Sun so einen Fehler in ihrer Doku haben. Stimmt vielleicht mit meiner Installation, oder mit Eclipse etwas nicht?
Hier der Quellcode, meiner beiden Klassen:
Producer:
Code:
import java.util.concurrent.*;
public class Producer extends Thread {
private BlockingQueue cubbyhole;
private int number;
public Producer(BlockingQueue c, int num) {
cubbyhole = c;
number = num;
}
public void run() {
for (int i = 0; i < 10; i++) {
try {
cubbyhole.put(i);
System.out.println("Producer" + number + "put:" + i);
sleep((int)(Math.random()*100));
} catch (InterruptedException e) {
}
}
}
}
Consumer:
Code:
import java.util.concurrent.*;
public class Consumer extends Thread {
private BlockingQueue cubbyhole;
private int number;
public Consumer(BlockingQueue c, int num) {
cubbyhole = c;
number = num;
}
public void run() {
int value = 0;
//String bla = null;
try {
for (int i = 0; i < 10; i++) {
value = cubbyhole.take();
System.out.println("Consumer" + number + "got: " + value);
}
} catch (InterruptedException e) {
}
}
}
Gruß
Kolja