Mesmo com o Vector, estou com o mesmo problema que ocorre no Ex. 3. Eu executo o código abaixo, e só é exibida no console a mensagem "Threads produtoras de mensagens finalizadas!", e o programa não finaliza sozinho.
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;
}
@Override
public void run() {
for(int i = comeco; i < fim; i++){
mensagens.add("Mensagem: " + i);
}
}
}
import java.util.ArrayList;
import java.util.Collection;
import java.util.Vector;
public class RegistroMensagens {
public static void main(String[] args) throws InterruptedException {
Collection<String> mensagens = new Vector<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(2000, 30000, mensagens));
t1.start();
t2.start();
t3.start();
//faz com quem a thread que roda o main aguarde o fim dessas
t1.join();
t2.join();
t3.join();
System.out.println("Threads produtoras de mensagens finalizadas!");
//verifica se todas as mensagens foram guardadas
for(int i = 0; i < 15000; i++){
if(!mensagens.contains("Mensagem " + i)){
throw new IllegalStateException("não encontrei a mensagem: " + i);
}
}
//verifica se alguma mensaagem ficou nula
if(mensagens.contains(null))
throw new IllegalStateException("não devia ser null aqui dentro!");
System.out.println("Fim da execução com sucesso");
}
}