2
respostas

Meu ServidorDeTeste não exibe a mensagem de tratamento de erro

mensagem: System.out.println("catch na thread MAIN " + e.getMessage());

package br.com.alura.experimento;

import br.com.alura.experimento.TarefaPararServidor;

public class ServidorDeTeste {

    private boolean estaRodando = false;

    public static void main(String[] args) throws InterruptedException {
        ServidorDeTeste servidor = new ServidorDeTeste();
        servidor.rodar();
        servidor.alterandoAtributo();
    }

    private void rodar() {

        new Thread(new Runnable() {

            public void run() {
                try {
                    System.out.println("Servidor comecando, estaRodando=" + estaRodando);
                    while(!estaRodando) {}

                    if(estaRodando) {
                        throw new RuntimeException("Deu erro na thread ....");
                    }


                    System.out.println("Servidor rodadndo, estaRodando=" + estaRodando);

                    while(estaRodando) {}

                    System.out.println("Servidor terminando, estaRodando=" + estaRodando);
                } catch (Exception e) {
                    System.out.println("catch na thread MAIN " + e.getMessage());
                }
            }    
        }).start();
    }

    public synchronized boolean estaRodando() {
        return this.estaRodando;
    }

    public synchronized void parar() {
        this.estaRodando = false;
    }

    public synchronized void ligar() {
        this.estaRodando = true;
    }

    private void alterandoAtributo() throws InterruptedException {
        Thread.sleep(1000);
        System.out.println("Main alterando estaRodando=true");
        this.ligar();;

        Thread.sleep(5000);
        System.out.println("Main alterando estaRodando=false");
        this.parar();;        
    }

}
2 respostas

Bom dia Gustavo,

Aqui eu percebi que seu programa está ficando preso no

while(!estaRodando) {}

Quando coloquei uma instrução dentro deste while ele funcionou.

while(!estaRodando) {
 System.out.println("estou no while!");
}

Eu só não entendi porque isso resolve.

Fazer isso dai gerou foi um loop infinito