SlideShare a Scribd company logo
1 of 8
Download to read offline
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();

         }

}




 

More Related Content

Viewers also liked

Presentacion diseño grafico
Presentacion diseño graficoPresentacion diseño grafico
Presentacion diseño graficoSusana Clavijo
 
Proyecto diseño completo
Proyecto diseño completoProyecto diseño completo
Proyecto diseño completoSusana Clavijo
 
Variables scratch
Variables scratch Variables scratch
Variables scratch jesus142814
 
Letter_of_recommendation_Dr._Fibiger
Letter_of_recommendation_Dr._FibigerLetter_of_recommendation_Dr._Fibiger
Letter_of_recommendation_Dr._FibigerEmil M. Morell
 
Unidad 9 y 10 hipervinculos
Unidad 9 y 10 hipervinculosUnidad 9 y 10 hipervinculos
Unidad 9 y 10 hipervinculosjesus142814
 
A S P E C T O S I N T R O D U TÓ R I O S D A N E G O C I AÇÃ O
A S P E C T O S  I N T R O D U TÓ R I O S  D A  N E G O C I AÇÃ OA S P E C T O S  I N T R O D U TÓ R I O S  D A  N E G O C I AÇÃ O
A S P E C T O S I N T R O D U TÓ R I O S D A N E G O C I AÇÃ Oguestb98526
 
Diseño de circuitos alimentados por ca
Diseño de circuitos alimentados por caDiseño de circuitos alimentados por ca
Diseño de circuitos alimentados por caEvaldes01
 
Elementos que debe conocer un diseñador en cursos web
Elementos que debe conocer un diseñador en cursos webElementos que debe conocer un diseñador en cursos web
Elementos que debe conocer un diseñador en cursos webVanessa Cedeño
 
Analysis for magazine front covers
Analysis for magazine front coversAnalysis for magazine front covers
Analysis for magazine front coversgg05047897
 
Certificate of appreciation
Certificate of appreciationCertificate of appreciation
Certificate of appreciationShady Hassan
 
MãE Ideal Danusa LeãO.Pps
MãE Ideal Danusa LeãO.Pps MãE Ideal Danusa LeãO.Pps
MãE Ideal Danusa LeãO.Pps guest2174ad
 
Representação contra gilmar mendes
Representação contra gilmar mendesRepresentação contra gilmar mendes
Representação contra gilmar mendesHudson Cunha
 
Unidad educativa municipal oswaldo lombeyda
Unidad educativa municipal oswaldo lombeydaUnidad educativa municipal oswaldo lombeyda
Unidad educativa municipal oswaldo lombeydacrisandy96
 

Viewers also liked (20)

Como son los niños
Como son los niñosComo son los niños
Como son los niños
 
Niños maltratados
Niños maltratadosNiños maltratados
Niños maltratados
 
Calendario partidos masculinos
Calendario partidos masculinosCalendario partidos masculinos
Calendario partidos masculinos
 
Presentacion diseño grafico
Presentacion diseño graficoPresentacion diseño grafico
Presentacion diseño grafico
 
Proyecto diseño completo
Proyecto diseño completoProyecto diseño completo
Proyecto diseño completo
 
Variables scratch
Variables scratch Variables scratch
Variables scratch
 
Letter_of_recommendation_Dr._Fibiger
Letter_of_recommendation_Dr._FibigerLetter_of_recommendation_Dr._Fibiger
Letter_of_recommendation_Dr._Fibiger
 
Unidad 9 y 10 hipervinculos
Unidad 9 y 10 hipervinculosUnidad 9 y 10 hipervinculos
Unidad 9 y 10 hipervinculos
 
A S P E C T O S I N T R O D U TÓ R I O S D A N E G O C I AÇÃ O
A S P E C T O S  I N T R O D U TÓ R I O S  D A  N E G O C I AÇÃ OA S P E C T O S  I N T R O D U TÓ R I O S  D A  N E G O C I AÇÃ O
A S P E C T O S I N T R O D U TÓ R I O S D A N E G O C I AÇÃ O
 
Diseño de circuitos alimentados por ca
Diseño de circuitos alimentados por caDiseño de circuitos alimentados por ca
Diseño de circuitos alimentados por ca
 
Regras Ppt
Regras PptRegras Ppt
Regras Ppt
 
Matt jewel viola_sky
Matt jewel viola_skyMatt jewel viola_sky
Matt jewel viola_sky
 
Elementos que debe conocer un diseñador en cursos web
Elementos que debe conocer un diseñador en cursos webElementos que debe conocer un diseñador en cursos web
Elementos que debe conocer un diseñador en cursos web
 
Analysis for magazine front covers
Analysis for magazine front coversAnalysis for magazine front covers
Analysis for magazine front covers
 
Certificate of appreciation
Certificate of appreciationCertificate of appreciation
Certificate of appreciation
 
Monet
MonetMonet
Monet
 
MãE Ideal Danusa LeãO.Pps
MãE Ideal Danusa LeãO.Pps MãE Ideal Danusa LeãO.Pps
MãE Ideal Danusa LeãO.Pps
 
Representação contra gilmar mendes
Representação contra gilmar mendesRepresentação contra gilmar mendes
Representação contra gilmar mendes
 
Correccion epu.
Correccion epu.Correccion epu.
Correccion epu.
 
Unidad educativa municipal oswaldo lombeyda
Unidad educativa municipal oswaldo lombeydaUnidad educativa municipal oswaldo lombeyda
Unidad educativa municipal oswaldo lombeyda
 

Similar to Programação com Threads - Código Fonte Conta Bancária Conjunta

Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1ariovaldodias
 
Construtores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxConstrutores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxJoberthSilva
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggersDaniel Maia
 
Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days Danilo Pereira De Luca
 
Programação Concorrente - Aula 04
Programação Concorrente - Aula 04Programação Concorrente - Aula 04
Programação Concorrente - Aula 04thomasdacosta
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetrosMaurício Linhares
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1Sliedesharessbarbosa
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebDalton Martins
 
Java - Aula 3 - Construtores
Java - Aula 3 - ConstrutoresJava - Aula 3 - Construtores
Java - Aula 3 - ConstrutoresMoises Omena
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portuguesLaura
 
Exercícios java 20 02
Exercícios java 20   02Exercícios java 20   02
Exercícios java 20 02julyesersantos
 

Similar to Programação com Threads - Código Fonte Conta Bancária Conjunta (20)

Java 05 Oo Basica
Java 05 Oo BasicaJava 05 Oo Basica
Java 05 Oo Basica
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1Introdução à análise orientada a objetos parte 1
Introdução à análise orientada a objetos parte 1
 
Construtores_Sobrecarga.pptx
Construtores_Sobrecarga.pptxConstrutores_Sobrecarga.pptx
Construtores_Sobrecarga.pptx
 
VRaptor4
VRaptor4VRaptor4
VRaptor4
 
RMI em Java
RMI em JavaRMI em Java
RMI em Java
 
Prática de laboratório utilizando views, stored procedures e triggers
Prática de laboratório   utilizando views, stored procedures e triggersPrática de laboratório   utilizando views, stored procedures e triggers
Prática de laboratório utilizando views, stored procedures e triggers
 
Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days Como escrever bons testes! - Dex transforming days
Como escrever bons testes! - Dex transforming days
 
Clean code
Clean codeClean code
Clean code
 
Programação Concorrente - Aula 04
Programação Concorrente - Aula 04Programação Concorrente - Aula 04
Programação Concorrente - Aula 04
 
Curso java 03 - métodos e parâmetros
Curso java   03 - métodos e parâmetrosCurso java   03 - métodos e parâmetros
Curso java 03 - métodos e parâmetros
 
Dip the dependency inversion principle
Dip   the dependency inversion principleDip   the dependency inversion principle
Dip the dependency inversion principle
 
JasperReports Tecnicas de geracao_de_relatorios1
JasperReports  Tecnicas de geracao_de_relatorios1JasperReports  Tecnicas de geracao_de_relatorios1
JasperReports Tecnicas de geracao_de_relatorios1
 
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação WebAula 08 - Introdução ao banco de dados MySQL - Programação Web
Aula 08 - Introdução ao banco de dados MySQL - Programação Web
 
Java - Aula 3 - Construtores
Java - Aula 3 - ConstrutoresJava - Aula 3 - Construtores
Java - Aula 3 - Construtores
 
Design patterns
Design patternsDesign patterns
Design patterns
 
Spring Capitulo 03
Spring Capitulo 03Spring Capitulo 03
Spring Capitulo 03
 
Tutorial Java: Polimorfismo
Tutorial Java: PolimorfismoTutorial Java: Polimorfismo
Tutorial Java: Polimorfismo
 
Curso avançado de c++ em portugues
Curso avançado de c++ em portuguesCurso avançado de c++ em portugues
Curso avançado de c++ em portugues
 
Exercícios java 20 02
Exercícios java 20   02Exercícios java 20   02
Exercícios java 20 02
 

Programação com Threads - Código Fonte Conta Bancária Conjunta

  • 1. 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          
  • 2.       Sumário Código Fonte Classe Banco ..................................... 3 Classe Cliente ................................... 4 Classe Conta ..................................... 6 Main ............................................. 8                                        
  • 3. 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; } } }  
  • 4. 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 */  
  • 5. 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); } }  
  • 6. 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; }  
  • 7. /** * 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; } }  
  • 8. 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(); } }