2
respostas

Exception IllegalStateException

Meu código está exatamente igual ao do exercício, porém não retorna a mensagem de erro lançada pelo throw. Em vez disso, a janela do Debug aparece com a declaração:

Thread [main] (Suspended (exception IllegalStateException)) TestaThreadsSimultaneas.main(String[]) line: 39

2 respostas

Oi Jonathan, compartilha o seu código.

public class ProduzMensagens implements Runnable {

    private int comeco;
    private int fim;
    private Collection<String> mensagens;

    public ProduzMensagens(int comeco, int fim, Collection<String> mensagens) {
        this.comeco = comeco;
        this.fim = fim;
        this.mensagens = mensagens;
    }
    @Override
    public void run() {
        for (int i = comeco; i < fim; i++) {
            mensagens.add("mensagem" + i);
        }
    }
public class TestaThreadsSimultaneas {

    public static void main(String[] args) throws InterruptedException {

        Collection<String> mensagens = new ArrayList<String>();

        Thread t1 = new Thread(new ProduzMensagens(0, 10000, mensagens));
        Thread t2 = new Thread(new ProduzMensagens(10000, 20000, mensagens));
        Thread t3 = new Thread(new ProduzMensagens(20000, 30000, mensagens));

        t1.start();
        t2.start();
        t3.start();

        t1.join();
        t2.join();
        t3.join();

        System.out.println("Threads produtoras de mensagens finalizadas");

        for (int i = 0; i < 15000; i++) {
            if(!mensagens.contains("mensagens" + i)) {
                throw new IllegalStateException("A seguinte mensagem não foi encontrada: " + i);
            }
        }

        if (mensagens.contains(null)) {
            throw new IllegalStateException("valor null encontrado");
        }

        System.out.println("Fim da execução com sucesso");
    }

}

Adiciono o fato de adicionar a sentença com synchronized e continuar o mesmo problema. Por algum motivo a Exception está sendo suspensa