Threads Multithreading, Producer/Consumer, notify()

Iago

Mitglied
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 "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();
            }
        }   
    }
}
 

Iago

Mitglied
Korrektur: Wenn ich mir nun die Ausgabe anschaue:

Code:
New Question: 0
ANSWERED Questions: 0
No questions to Answer ... waiting for Producer to get questions  <------
New Question: 1
New Question: 2
New Question: 3
ANSWERED Question: 1
ANSWERED Question: 2
New Question: 4
.....
 
Zuletzt bearbeitet:

Iago

Mitglied
Java:
public class Producer implements Runnable {

   List<Integer> questionList = null;
   final int LIMIT = 5;
   private int questionNo;

    public Producer(List<Integer> questionList) {
         this.questionList = questionList; 
    } 

    public void readQuestion(int questionNo) throws InterruptedException {

       synchronized(questionsList) {
               while(questionList.size() == LIMIT) {
                     System.out.println("Questions have piled up .. wait for answers");
                    questionList.wait();
    }
    }

       synchronized(questionList) {

                System.out.println("New Question: " + questionNo);
                questionList.add(questionNo);
                Thread.sleep(100);
                questionList.notify();
                }
                }

              
      public void run() {
           while(true){
             try {
              readQuestion(questionNo++);
         }   
         catch (InterruptedException e) {}
      }         

}
 
Zuletzt bearbeitet:

Iago

Mitglied
Ist es so, dass hier durch notif() hier DERSELBE Thread wieder gestartet wird

Falsch.. der Kollege aus Pakistan schreibt: "notify() wakes up the fist thread that called wait() on the same object"

Aber dann beleibt trotzdem die Frage, was ist wenn der erste thread wait() gar nicht aufruft??
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
buzzlightyeah multithreading Java Basics - Anfänger-Themen 4
sserio Frage zu Threading - Multithreading Java Basics - Anfänger-Themen 2
M Mehre Dateien parallel kopieren mit Multithreading Java Basics - Anfänger-Themen 8
kilopack15 Verzweiflung wegen Berechnung mit Multithreading Java Basics - Anfänger-Themen 1
P Multithreading in Java Java Basics - Anfänger-Themen 9
N Threads Read-Modify-Write Problem bei Multithreading (philosopher dining problem) Java Basics - Anfänger-Themen 5
R Threads Multithreading Java Basics - Anfänger-Themen 15
Z Verständnisfrage zum Multithreading Java Basics - Anfänger-Themen 3
T Threads MultiThreading NullPointerException Java Basics - Anfänger-Themen 7
K Frage bzgl. Multithreading Java Basics - Anfänger-Themen 5
B Multithreading und eigene Queue entwickeln Java Basics - Anfänger-Themen 3
C Multithreading, Methoden sichern Java Basics - Anfänger-Themen 5
P Hilfe bei MultiThreading; Einige Fragen. Java Basics - Anfänger-Themen 14
S OOP Multithreading Java Basics - Anfänger-Themen 5
B Multithreading Java Basics - Anfänger-Themen 5
0din Multithreading und stop Java Basics - Anfänger-Themen 5
P Singletons und Multithreading Java Basics - Anfänger-Themen 11
U Anfängerfrage - Multithreading Java Basics - Anfänger-Themen 8
H Multithreading Java Basics - Anfänger-Themen 7
M Multithreading Java Basics - Anfänger-Themen 18
I Multithreading (Prüfungsvorbereitung) Java Basics - Anfänger-Themen 6
G UI friert bei Multithreading ein Java Basics - Anfänger-Themen 3
J Multithreading mit einer TextArea Java Basics - Anfänger-Themen 29
JFeel-x Multithreading in awt Java Basics - Anfänger-Themen 2
L NullpointerException wegen wahrscheinlichem Multithreading Java Basics - Anfänger-Themen 4
Z Multithreading Java Basics - Anfänger-Themen 2
P Multithreading Java Basics - Anfänger-Themen 22
F Producer/Consumer oder reicht synchronizedList Java Basics - Anfänger-Themen 9
A Thread Producer - Consumer Java Basics - Anfänger-Themen 1
F Consumer-Producer bauen Java Basics - Anfänger-Themen 8
B Threads Producer-Consumer Problem Java Basics - Anfänger-Themen 3
M Producer / Consumer mal anders. Java Basics - Anfänger-Themen 7
J Methoden Observer-Pattern mit Consumer und accept( ) Java Basics - Anfänger-Themen 6
DeVolt Interface Frage zu Consumer Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben