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