ae pessoal lendo o finalzinho do livro da kathy cap 9. fiquei em uma duvida desses metodo wait() e notify(). olha a sintaxe abaixo:
class ThreadA{
public static void main(String [] args){
ThreadB b = new ThreadB();
b.start();
//sicronizo o objeto e o bloco do codigo
synchronized(b){
try{
System.out.println("waiting for b complete...");
b.wait();
}catch(InterruptedException e){}
System.out.println("Total " + b.total);
}
}
}
class ThreadB extends Thread{
int total;
public void run(){
synchronized(this){
for(int i=0;i<3;i++){
total+=i;
}
notify();
}
}
}
queri entender uma coisa… quando uso o wait() eu digo para Thread que sincronizei ei espere ai… ate vc receber uma notificação para continuar… seria isso?
entao minha thread na linha 9 para a execução da threadA e essa thread so continua quando a threadB b receber notify()? eu fiquei meio confuso na implementacao desses metodos… sao bastante legais mais… assim uma thread sempre fica esperando la? sem fazer nada ate que receba uma notificação?
e outro codigo que a kathy disse que se eu alterar a linha 36 para notify() apenas um thread será notificado mudei e nao vi efeito no resultado… :?
class Reader extends Thread{
Calculator c;
public Reader(Calculator calc){
c = calc;
}
public void run(){
synchronized(c){
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[]){
//objeto da thread
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){
for(int i=0;i<100;i++){
total+=1;
}
//libera toda as tres thread em espera de Readrs
notifyAll();
}
}
}
maior duvida nesse finalizinho… quem puder dar esse help ai agradeço!!