ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”

8

Click here to load reader

Transcript of ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”

Page 1: 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  

 

 

 

Page 2: ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”

 

 

 

 

Sumário Código Fonte

Classe Banco ..................................... 3

Classe Cliente ................................... 4

Classe Conta ..................................... 6

Main ............................................. 8

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

Page 3: ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”

 

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;

}

}

}

Page 4: ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”

 

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

*/

Page 5: ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”

 

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);

}

}

Page 6: ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”

 

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;

}

Page 7: ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”

 

/**

* 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;

}

}

Page 8: ProgramaçãO Com Threads – CóDigo Fonte “Conta BancáRia Conjunta”

 

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();

}

}