-----> MENSAGEM DE ERRO <------
Exception in thread "Thread-2" Exception in thread "Thread-1" java.lang.OutOfMemoryError: Java heap space
Threads produtoras de mensagens finalizadas!
Fim da execução com sucesso
Exception in thread "main" java.lang.IllegalStateException: Não encontrei a mensagem: 1
at Alura3.RegistroDeMensagens.main(RegistroDeMensagens.java:28)
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message can't create byte arrau at JPLISAgent.c line: 813
*** java.lang.instrument ASSERTION FAILED ***: "!errorOutstanding" with message can't create byte arrau at JPLISAgent.c line: 813
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Thread-0"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Thread-1"
Exception: java.lang.OutOfMemoryError thrown from the UncaughtExceptionHandler in thread "Thread-2"
Process finished with exit code 1
-----> MAIN <----
package Alura3;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
import java.util.Vector;
public class RegistroDeMensagens {
public static void main(String[]args) throws InterruptedException {
LinkedList<String> mensagens = new LinkedList<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 < 1500; i++){
if (!mensagens.contains("Mensagem " + i)){
throw new IllegalStateException("Não encontrei a mensagem: "+i);
}
System.out.println("Fim da execução com sucesso");
}
if (mensagens.contains(null)){
throw new IllegalStateException("Não devia ser null aqui Dentro");
}
}
}
----> CLASSE PRODUZ MENSAGENS <---
package Alura3;
import java.util.Collection;
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;
}
public void run() {
for (int i = comeco; i < fim; fim++) {
synchronized (mensagens) {
mensagens.add("Mensagem " + i);
}
}
}
}