Estou com um código de threads para gerar três produtos e calcular o índice em cima do preço original. A minha pergunta é: por que a segunda thread pega o valor definido pela primeira, se ao instanciar um novo objeto ele cria com o valor original?
OBJETO
package javaAvancado;
public class Cap4Ex5Produtos {
private double preco;
public synchronized double verificarPreco() {
return this.preco;
}
public synchronized void reajustarPreco(double taxa) {
this.preco = this.preco * taxa;
}
public double efetuarCompra() {
return this.preco;
}
/**
* @param preco
*/
public Cap4Ex5Produtos(double preco) {
super();
this.preco = preco;
}
}
THREAD
package javaAvancado;
public class Cap4Ex5ProcessaProdutos implements Runnable {
double preco = 2.0;
Cap4Ex5Produtos produto = new Cap4Ex5Produtos(preco);
double indice = 3.0;
@Override
public synchronized void run() {
System.out.println(Thread.currentThread().getName() + " / Preço: " + produto.verificarPreco());
produto.reajustarPreco(indice);
System.out.println(Thread.currentThread().getName() + " / Novo preço: " + produto.verificarPreco());
produto.efetuarCompra();
}
}
PRINCIPAL
package javaAvancado;
public class Cap4Ex5Principal {
public static void main(String[] args) {
Cap4Ex5ProcessaProdutos processos = new Cap4Ex5ProcessaProdutos();
Thread processoUm = new Thread(processos);
Thread processoDois = new Thread(processos);
Thread processoTres = new Thread(processos);
processoUm.setName("P1");
processoDois.setName("P2");
processoTres.setName("P3");
processoUm.start();
processoDois.start();
processoTres.start();
}
}
RESULTADO
P1 / Preço: 2.0
P1 / Novo preço: 6.0
P3 / Preço: 6.0
P3 / Novo preço: 18.0
P2 / Preço: 18.0
P2 / Novo preço: 54.0
Agradeço desde já pela ajuda!
Obrigado a todos(as)!