ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”
Click here to load reader
-
Upload
mauriciopel -
Category
Technology
-
view
816 -
download
1
Transcript of ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”
Universidade Católica de Pelotas Centro Politécnico – Curso de Tecnologia em Analise e Desenvolvimento de Sistemas Disciplina de Introdução a Sistemas Operacionais Prof. Eduardo Maroñas Monks
Programação com Threads – Código Fonte “Conta Bancária Conjunta”
PELOTAS, 21 DE JUNHO DE 2009
Mauricio Pureza Rosa
Sumário Código Fonte
Classe Banco ..................................... 3
Classe Cliente ................................... 4
Classe Conta ..................................... 6
Main ............................................. 8
Classe Banco
package banco;
import conta.Conta;
/**
* Banco
*/
public class Banco {
/**
* O método que irá simular o saques na conta.
* @param conta
* @param valor
* @return boolean
*/
public boolean saque(Conta conta, double valor) {
synchronized (conta) {
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());
System.out.print(" sacou R$" + valor);
System.out.print(". Saldo: após saque: R$" + novoSaldo);
conta.setSaldo(novoSaldo);
return true;
}
}
}
Classe Cliente
package cliente;
import banco.Banco;
import conta.Conta;
/**
* Clientes do Banco
*/
public class Cliente extends Thread {
/**
* Atributo que irá criar um Banco.
*/
private static Banco banco = new Banco();
/**
* Atributo que irá atribuir um valor nulo pra conta.
*/
private Conta conta = null;
/**
* Atributo que irá atribuir o valor do saque dos clientes.
*/
private double valor = 100;
/**
* Contrutor que irá atualizar o Nome do Cliente e a Conta.
* @param nome
* @param conta
*/
public Cliente(String nome, Conta conta) {
super(nome);
this.conta = conta;
}
/**
* Este método é executado pela linha de execução.
*/
@Override
public void run() {
double total = 0;
while (banco.saque(conta, valor)) {
total = total + valor;
}
System.out.println(getName() + " sacou total de R$" + total);
}
}
Classe Conta
package conta;
/**
* Conta Bancária
*/
public class Conta {
/**
* Atributo que irá atribuir o valor inicial da conta.
*/
public double saldo = 0;
/**
* Construtor que irá receber o saldo inicial e irá escrever o saldo inicial para o usuário.
* @param saldo
*/
public Conta(double saldo) {
this.saldo = saldo;
System.out.println("Saldo inicial: R$" + saldo);
}
/**
* Método que irá retornar o saldo.
* @return saldo
*/
public double getSaldo() {
return this.saldo;
}
/**
* Metodo que irá atualizar o saldo.
* @param s
*/
public void setSaldo(double s) {
this.saldo = s;
}
/**
* Método que irá verificar se há saldo suficiente para retirada e se houver irá fazer a retirada do valor solicitado e atualiza-rá o novo saldo.
* @param valor
* @return saldo
*/
public double debitarValor(double valor) {
if (this.saldo < valor) {
System.out.println("Saldo insuficiente para saque.");
return -1;
} else {
this.saldo = saldo-valor;
return this.saldo;
}
}
Main
package sistemas;
import conta.Conta;
import cliente.Cliente;
/**
* Família com conta conjunta
*/
public class Familia {
public static void main(String args[]) {
// Cria conta conjunta da família
final Conta conta = new Conta(10000);
// Cria os 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);
Cliente primo = new Cliente("Primo", conta);
// Inicia as threads
pai.start();
mae.start();
filho.start();
primo.start();
}
}