Concept atrás de colocar os métodos wait (), notify () na classe Object [duplicate]
Esta pergunta já tem uma resposta aqui:
Como os métodos wait () e notify () podem ser chamados em objetos que não são thread 9 respostas Estou tendo dificuldade para entender o conceito por trás da colocaçãowait()
emObject
classe. Para essas questões, considere sewait()
enotifyAll()
estão dentroThread
classe
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();
}
}
}
Minha pergunta é: que diferença isso poderia ter feito? Na linha 9, estamos adquirindo o bloqueio no objeto c e, em seguida, realizando a espera que satisfaz a condição de espera de que precisamos adquirir o bloqueio no objeto antes de usar a espera e, portanto, é o caso de notifyAll adquirimos o bloqueio do objeto da Calculadora na linha 31 .