Boa noite pessoal.
Estou aqui mais uma vez para, se possível, vocês me ajudarem a solucionar um problema.
Tenho um código, o famoso contaCorrente, e preciso acabar com as inconsistências usando a classe Semaphore.
O problema é que não entendi como ela funciona e não sei como fazer.
o código é este:
class Conta extends Thread {
public double saldo = 0;
public Conta(double saldo) {
this.saldo = saldo;
System.out.println("Conta criada. Saldo inicial: R$" + saldo);
}
public double getSaldo() {
return saldo;
}
public void setSaldo(double saldo) {
this.saldo = saldo;
}
}
class Banco extends Thread{
public boolean saque(Conta conta, double valor) {
double saldo = conta.getSaldo();
if (saldo < valor) {
System.out.println("Saldo insuficiente para o saque.");
return false;
}
double novoSaldo = saldo - valor;
System.out.println(Thread.currentThread().getName() + " sacou R$"+valor+". Saldo após saque: R$"+novoSaldo);
conta.setSaldo(novoSaldo);
return true;
}
}
public class Cliente extends Thread {
private static Banco banco = new Banco();
private Conta conta = null;
private double valor = 100;
public Cliente(String nome, Conta conta) {
super(nome);
this.conta = conta;
}
public void run() {
double total = 0;
while (banco.saque(conta,valor))
total += valor;
System.out.println(getName() + " sacou total de R$" + total);
}
}
class Familia {
public static void main (String args[]) {
// Cria conta conjunta da família
final Conta conta = new Conta(100000);
// Cria familiares e lhes informa a conta conjunta
Cliente pai = new Cliente("Pai ", conta);
Cliente mae = new Cliente("Mãe ", conta);
Cliente filho = new Cliente("Filho", conta);
// Inicia as threads
pai.start();
mae.start();
filho.start();
}
}
Está havendo muita inconsistência na saída dos dados...
Se puderem me ajudar...