Bom pessoal, eu estava tentando ter o efeito de uma Thread esperar para sempre usando o método wait(), e não dando um notify() ou um notifyAll() no objeto "c", mas a após o termino da Thread Calculator mesmo sem notify() ou nofityAll(), as threads estão sendo "acordadas" normalmente, poderiam me
dizer onde estou errando? Lembrando que eu quero o efeito contrário ao ideal, ou seja quero que as Threads fiquem durmindo, realmente quer o "erro".
Segue abaixo o código
package br.com.thread.calculator;
public class Reader extends Thread {
Calculator c;
public Reader(Calculator calc,String nome){
super(nome);
c = calc;
}
@Override
public void run(){
synchronized(c){
System.out.println("Waiting for calculation..."+Thread.currentThread().getName());
try {
c.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println("Total is "+c.total);
}
}
//***********************Main*****************************************
public static void main(String[] args) {
Calculator calculator = new Calculator();
calculator.setPriority(MIN_PRIORITY);
Reader r1 = new Reader(calculator,"Segmento 1");
r1.start();
Reader r2 = new Reader(calculator,"Segmento 2");
r2.start();
Reader r3 = new Reader(calculator,"Segmento 3");
r3.start();
calculator.start();
}
}
class Calculator extends Thread{
int total;
@Override
public void run(){
synchronized(this){
for(int i = 0; i < 10; i++){
total +=i;
System.out.println(i);
}
}
}
}
Saída:
Waiting for calculation...Segmento 1
Waiting for calculation...Segmento 3
Waiting for calculation...Segmento 2
0
1
2
3
4
5
6
7
8
9
Total is 45
Total is 45
Total is 45