Você está na página 1de 8

Universidade Catlica de Pelotas Centro Politcnico Curso de Tecnologia em Analise e Desenvolvimento de Sistemas Disciplina de Introduo a Sistemas Operacionais Prof.

. Eduardo Maroas Monks

Programao com Threads Cdigo Fonte Conta Bancria Conjunta

PELOTAS, 21 DE JUNHO DE 2009

Mauricio Pureza Rosa


Sumrio Cdigo Fonte


Classe Banco ..................................... 3 Classe Cliente ................................... 4 Classe Conta ..................................... 6 Main ............................................. 8

Classe Banco

package banco; import conta.Conta;

/** * Banco */ public class Banco {

/** * O mtodo 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: aps 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 mtodo executado pela linha de execuo. */ @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 Bancria */ 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 usurio. * @param saldo */ public Conta(double saldo) { this.saldo = saldo; System.out.println("Saldo inicial: R$" + saldo); }

/** * Mtodo 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; }

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

/** * Famlia com conta conjunta */ public class Familia {

public static void main(String args[]) {

// Cria conta conjunta da famlia 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("Me ", conta); Cliente filho = new Cliente("Filho ", conta); Cliente primo = new Cliente("Primo", conta);

// Inicia as threads pai.start(); mae.start(); filho.start(); primo.start(); } }

Você também pode gostar