SlideShare une entreprise Scribd logo
1  sur  8
Télécharger pour lire hors ligne
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();

         }

}




 

Contenu connexe

Similaire à 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
 

Similaire à 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
 

Dernier

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx2m Assessoria
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuisKitota
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx2m Assessoria
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx2m Assessoria
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploDanilo Pinotti
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfSamaraLunas
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsDanilo Pinotti
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx2m Assessoria
 

Dernier (9)

ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docxATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
ATIVIDADE 1 - SISTEMAS DISTRIBUÍDOS E REDES - 52_2024.docx
 

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