Buscar

Exemplo de criação de Thread Com Java [Compra em família usando ContaConjunta não sincronizada e sincronizada]

Esta é uma pré-visualização de arquivo. Entre para ver o arquivo original

192f8fc1-daca-4dcb-b0a6-c74c7b06db90
Thread/src/com/ayrongabriel/threads/ComprasEmFamilia.java
package com.ayrongabriel.threads;
public class ComprasEmFamilia implements Runnable {
	
	// Criação/Inicialização da conta conjunta não sincronizada
	//ContaConjuntaNaoSicronizada conta = new ContaConjuntaNaoSicronizada();
	
//	Criação/Inicialização da conta conjunta sicronizada
	ContaConjuntaSicronizada conta = new ContaConjuntaSicronizada();
	public static void main(String[] args) {
		
		Runnable fazerCompras = new ComprasEmFamilia();
		new Thread(fazerCompras, "Pai").start();
		new Thread(fazerCompras, "Mãe").start();
		new Thread(fazerCompras, "Filho").start();
	}
	@Override
	public void run() {
		// pega o nome das Threads e seta na variável cliente 
		String cliente = Thread.currentThread().getName();
		for (int i = 0; i < 5; i++) {
			conta.sacar(250, cliente);
			if(conta.getSaldo() < 0){
				System.err.println("Saldo estourado!");
			}
		}
	}
}
Thread/src/com/ayrongabriel/threads/ContaConjuntaNaoSicronizada.java
package com.ayrongabriel.threads;
public class ContaConjuntaNaoSicronizada {
	
	double saldo = 1000;
	
	public double getSaldo(){
		return saldo;
	}
	
	public void sacar(double valor, String cliente){
		double saldoOriginal = saldo;
		if(saldo >= valor){
			System.out.println(cliente + " vai sacar");
			try {
				System.out.println(cliente +" aguardando...");
				Thread.sleep(3000);
			} catch (InterruptedException e) {
				System.out.println("InterruptedException");
			}
			saldo -= valor;
			String msg = cliente +" SACOU " + valor
					+ " [Saldo Inicial = " + saldoOriginal + "][Saldo final = " + saldo + "]";
			System.out.println(msg);
			System.out.println("-----------------------------------------------------------");
		}else{
			System.err.println("Saldo insuficiente para " + cliente);
		}
	}
}
Thread/bin/com/ayrongabriel/threads/ContaConjuntaNaoSicronizada.class
Thread/.project
 
	 Thread
	 
	 
	
	 
		 
			 org.eclipse.jdt.core.javabuilder
			 
			
		
	
	 
		 org.eclipse.jdt.core.javanature
	
Thread/.classpath
 
	 
	 
	 
Thread/bin/com/ayrongabriel/threads/ComprasEmFamilia.class
Thread/src/com/ayrongabriel/threads/ContaConjuntaSicronizada.java
package com.ayrongabriel.threads;
import java.util.Random;
public class ContaConjuntaSicronizada {
	
	double saldo = 1000;
	Random random = new Random();
	
	public double getSaldo(){
		return saldo;
	}
	
	public synchronized void sacar(double valor, String cliente){
		double saldoOriginal = saldo;
		if(saldo >= valor){
			System.out.println(cliente + " vai sacar");
			try {
				System.out.println(cliente +" aguardando...");
				Thread.sleep(random.nextInt(3000));
			} catch (InterruptedException e) {
				System.out.println("InterruptedException");
			}
			saldo -= valor;
			String msg = cliente +" SACOU " + valor
					+ " [Saldo Inicial = " + saldoOriginal + "][Saldo final = " + saldo + "]";
			System.out.println(msg);
			System.out.println("-----------------------------------------------------------");
		}else{
			System.err.println("Saldo insuficiente para " + cliente);
		}
	}
}
Thread/bin/com/ayrongabriel/threads/ContaConjuntaSicronizada.class

Teste o Premium para desbloquear

Aproveite todos os benefícios por 3 dias sem pagar! 😉
Já tem cadastro?

Outros materiais