não está trazendo o resultado igual do exercicio, não estou conseguindo enxergar o problema, pode ajudar?
```
package br.com.alura.banheiro;
public class Principal {
public static void main(String[] args) {
// TODO Auto-generated method stub
Banheiro banheiro = new Banheiro();
// Passando a tarefa e o nome do Thread
Thread convidado1 = new Thread(new TarefaNumero1(banheiro), "João");
Thread convidado2 = new Thread(new TarefaNumero2(banheiro), "Pedro");
Thread limpeza = new Thread(new TarefaLimpeza(banheiro), "Limpeza");
limpeza.setDaemon(true);
limpeza.start();
convidado1.start();
convidado2.start();
limpeza.start();
}
}
package br.com.alura.banheiro;
public class TarefaLimpeza implements Runnable {
private Banheiro banheiro;
public TarefaLimpeza(Banheiro banheiro) {
this.banheiro = banheiro;
}
@Override
public void run() {
while(true) {
this.banheiro.limpa();
try {
Thread.sleep(15000);//limpando cada 15s
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}
}
package br.com.alura.banheiro;
public class Banheiro {
String nome = Thread.currentThread().getName();
private boolean ehSujo = true;
public void fazNumero1() {
String nome = Thread.currentThread().getName();
System.out.println(nome + " batendo na porta");
synchronized (this) {
System.out.println(nome + " entrando no banheiro");
while (this.ehSujo) {
esperaLaFora(nome);
}
}
System.out.println(nome + " entrando no banheiro");
System.out.println(nome + " fazendo coisa rapida");
try {
Thread.sleep(8000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(nome + " dando descarga");
System.out.println(nome + " lavando a mao");
System.out.println(nome + " saindo do banheiro");
}
public void fazNumero2() {
String nome = Thread.currentThread().getName();
System.out.println(nome + " entrando no banheiro");
System.out.println(nome + " fazendo coisa demorada");
try {
Thread.sleep(15000);
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(nome + " dando descarga");
System.out.println(nome + " lavando a mao");
System.out.println(nome + " saindo do banheiro");
}
private void esperaLaFora(String nome) {
System.out.println(nome + ", eca, banheiro está sujo");
try {
this.wait();
} catch (InterruptedException e) {
e.printStackTrace();
}
}
public void limpa() {
String nome = Thread.currentThread().getName();
System.out.println(nome + " batendo na porta");
synchronized (this) {
System.out.println(nome + " entrando no banheiro");
if (!this.ehSujo) {
System.out.println(nome + ", não está sujo, vou sair");
return;
}
System.out.println(nome + " limpando o banheiro");
this.ehSujo = true;
try {
Thread.sleep(5000);
} catch (InterruptedException e) {
e.printStackTrace();
}
this.notifyAll();
System.out.println(nome + " saindo do banheiro");
}
}
}