Hallo Miteinander,
Gerne möchte ich die Funktionalität von notify() bezüglich des Consumer-Threads (s.u.) besser verstehen.
Wenn ich das Programm starte gibt der Producer Thread eine "Frage" (int-Wert) aus. Im Producer-Thread
wird notify() aufgerufen, der Consumer-Thread übernimmt und beantwortet die Frage zugleich und löscht die Frage von der Liste
mit remove(). (s.u.)
Wenn ich mir nun den Programm-Code anschaue, folgt auf die Beantwortung der Frage
Jetzt meine Frage: Ist es so, dass hier durch notif() hier DERSELBE Thread wieder gestartet wird? Oder liegt es an der while-Schleife (bei run()),
dass sofort
Vielen Dank!
Gerne möchte ich die Funktionalität von notify() bezüglich des Consumer-Threads (s.u.) besser verstehen.
Wenn ich das Programm starte gibt der Producer Thread eine "Frage" (int-Wert) aus. Im Producer-Thread
wird notify() aufgerufen, der Consumer-Thread übernimmt und beantwortet die Frage zugleich und löscht die Frage von der Liste
mit remove(). (s.u.)
Wenn ich mir nun den Programm-Code anschaue, folgt auf die Beantwortung der Frage
"ANSWERED Questions:"
sofort die Zeile: "No questions to Answer ... waiting for Producer to get questions"
Jetzt meine Frage: Ist es so, dass hier durch notif() hier DERSELBE Thread wieder gestartet wird? Oder liegt es an der while-Schleife (bei run()),
dass sofort
while(questionList.size() == LIMIT);
aufgerufen wird.Vielen Dank!
Java:
public class Consumer implements Runnable {
List<Integer> questionList = null;
public Consumer(List<Integer> questionsList) {
super();
this.questionList = questionsList;
}
public void answerQuestion() throws InterruptedException {
synchronized(questionList){
while(questionList.isEmpty()) {
System.out.println("No questions to Answer ... waiting for Producer to get questions");
questionList.wait();
}
}
synchronized(questionList) {
Thread.sleep(5000);
System.out.println("ANSWERED Questions: " + questionList.remove(0));
questionList.notify();
}
}
@Override
public void run() {
while(true) {
try {
answerQuestion();
} catch (InterruptedException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
}