SlideShare uma empresa Scribd logo
1 de 8
Baixar para ler 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();

         }

}




 

Mais conteúdo relacionado

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

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
Maurício Linhares
 
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
Dalton Martins
 
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
Laura
 
Exercícios java 20 02
Exercícios java 20   02Exercícios java 20   02
Exercícios java 20 02
julyesersantos
 

Semelhante a 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
 

Último

Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Dirceu Resende
 

Último (7)

Entrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo PagliusiEntrevistas, artigos, livros & citações de Paulo Pagliusi
Entrevistas, artigos, livros & citações de Paulo Pagliusi
 
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdfFrom_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
From_SEH_Overwrite_with_Egg_Hunter_to_Get_a_Shell_PT-BR.pdf
 
Apostila e caderno de exercicios de WORD
Apostila e caderno de exercicios de  WORDApostila e caderno de exercicios de  WORD
Apostila e caderno de exercicios de WORD
 
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
[ServiceNow] Upgrade de versão - 2ª edição (Revisada, atualizada e ampliada)
 
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIAEAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
EAD Curso - CIÊNCIA DE DADOS NA INDÚSTTRIA
 
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
Apresentação Power Embedded - Descubra uma nova forma de compartilhar relatór...
 
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo PagliusiPalestras sobre Cibersegurança em Eventos - Paulo Pagliusi
Palestras sobre Cibersegurança em Eventos - Paulo Pagliusi
 

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