1
resposta

Minha implementação

Segue minha implementação:

Classe Banheiro:

package br.com.alura.threads.banheiro;

public class Banheiro {
    
    
    
    public void fazNumero1() {
        
        String nome = Thread.currentThread().getName();
        baterAPorta(nome);
        
        // Sincronizar esse acesso (o acesso do meu objeto)
        synchronized(this) {
            
            System.out.println(nome + " entrando no banheiro");
            System.out.println(nome +" fazendo coisa rapida");
            
            try {
                Thread.sleep(5000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            
            System.out.println(nome +" dando descarga");
            System.out.println(nome +" lavando as maos");
            System.out.println(nome +" saindo do banheiro");
        
        }
    }
    
    public void fazNumero2() {
        String nome = Thread.currentThread().getName();
        baterAPorta(nome);
        
        // Sincronizar esse acesso (o acesso do meu objeto)
        synchronized(this) {
        
            System.out.println(nome +" entrando no banheiro");
            System.out.println(nome +" fazendo coisa demorada");
            
            try {
                Thread.sleep(10000);
            } catch (InterruptedException e) {
                throw new RuntimeException(e);
            }
            
            System.out.println(nome +" dando descarga");
            System.out.println(nome +" lavando as maos");
            System.out.println(nome +" saindo do banheiro");
        
        }
    }
    
    public void baterAPorta(String nome) {
        System.out.println(nome + " est\u00E1 batendo \u00E0 porta");
    }

}

Classe Principal:

package br.com.alura.threads.banheiro;

import br.com.alura.threads.banheiro.tarefas.TarefaNumero1;
import br.com.alura.threads.banheiro.tarefas.TarefaNumero2;

public class Principal {
    
    public static void main(String[] args) {
        
        Banheiro banheiro = new Banheiro();
        
        Runnable tarefaNum1 = new TarefaNumero1(banheiro);
        Runnable tarefaNum2 = new TarefaNumero2(banheiro);
        
        Thread convidado1 = new Thread(tarefaNum1, "convidado1");
        Thread convidado2 = new Thread(tarefaNum2, "convidado2");
        Thread convidado3 = new Thread(tarefaNum2, "convidado3");
        Thread convidado4 = new Thread(tarefaNum1, "convidado4");
        
        convidado1.start();
        convidado2.start();
        convidado3.start();
        convidado4.start();
        
    }

}

Classe TarefaNumero1:

package br.com.alura.threads.banheiro.tarefas;

import br.com.alura.threads.banheiro.Banheiro;

public class TarefaNumero1 implements Runnable {
    
    private Banheiro banheiro;
    
    public TarefaNumero1(Banheiro banheiro) {
        this.banheiro = banheiro;
    }

    @Override
    public void run() {
        banheiro.fazNumero1();
    }
    
}

Classe Tarefa Número 2:


package br.com.alura.threads.banheiro.tarefas;

import br.com.alura.threads.banheiro.Banheiro;

public class TarefaNumero2 implements Runnable {
    
    private Banheiro banheiro;
    
    public TarefaNumero2(Banheiro banheiro) {
        this.banheiro = banheiro;
    }
    
    @Override
    public void run() {
        banheiro.fazNumero2();
    }

}

P.S.: Adorei essa aula rs

1 resposta

Olá Gustavo, tudo bem com você?

Meus parabéns pela resolução do código da aula, seu código atende bem o que foi proposto. Fico feliz em saber que você gostou da aula. Continue com essa dedicação e empenho em colocar em prática o que está aprendendo, pois essa é uma das formas para fixarmos o conteúdo apresentado.

Em caso de dúvidas estou à disposição.

Abraços e bons estudos!