Zgoda za umieszczeniem metod wait (), replace () w klasie Object [duplikat]

To pytanie ma już odpowiedź tutaj:

Jak można wywoływać metody wait () i powiadomienie () na obiektach, które nie są wątkami? 9 odpowiedzi

Trudno mi zrozumieć koncepcję umieszczeniawait() wObject klasa. W przypadku tych pytań rozważ, czywait() inotifyAll() są wThread klasa

class Reader extends Thread {
    Calculator c;
    public Reader(Calculator calc) {
        c = calc;
    }

    public void run() {
        synchronized(c) {                              //line 9
        try {
            System.out.println("Waiting for calculation...");
            c.wait();
        } catch (InterruptedException e) {}
            System.out.println("Total is: " + c.total);
        }
    }

    public static void main(String [] args) {
        Calculator calculator = new Calculator();
        new Reader(calculator).start();
        new Reader(calculator).start();
        new Reader(calculator).start();
        calculator.start();
    }
}

class Calculator extends Thread {
    int total;
    public void run() {
        synchronized(this) {                     //Line 31
            for(int i=0;i<100;i++) {
                total += i;
            }
             notifyAll();
        }
    } 
}

Moje pytanie brzmi, jaką różnicę mogło to spowodować? W wierszu 9 uzyskujemy blokadę na obiekcie c, a następnie wykonujemy czekanie, które spełniają warunek oczekiwania, że musimy uzyskać blokadę na obiekcie przed użyciem oczekiwania, podobnie jest w przypadku powiadomienia Wszystkie uzyskaliśmy blokadę na obiekcie kalkulatora w linii 31 .

questionAnswers(11)

yourAnswerToTheQuestion