Iae galera, estou com um código más não estou conseguindo
entender e estou ficando louco com isso, por favor me ajudem
a entender esse código. Irei colocando minhas dúvidas ao lado do código como
comentário e irei númerar.
Tenho essa classe:
public class ProduzSQL implements Runnable{
private int comeco;
private int fim;
private Collection<String> sqls;
public ProduzSQL(int comeco, int fim, Collection<String> sqls) {
this.comeco = comeco;
this.fim = fim;
this.sqls = sqls;
}
public void run() {
for (int i = comeco; i < fim; i++) {
sqls.add("SQL"+i);
}
}
}
Até aqui está tudo bem. Tenho essa outra classe e muitas dúvidas.
public class BancoDeDados {
public static void main(String[] args) throws InterruptedException // 1) Porque gerou essa Exception? {
Collection<String> sqls = new HashSet<String>();
ProduzSQL p1 = new ProduzSQL(0, 100, sqls);
Thread t1 = new Thread(p1);
ProduzSQL p2 = new ProduzSQL(100, 200, sqls);
Thread t2 = new Thread(p2);
ProduzSQL p3 = new ProduzSQL(200, 300, sqls);
Thread t3 = new Thread(p3);
t1.start();
t2.start();
t3.start();
t1.join(); 2) Queria saber qual o efeito que causa os joins()?
t2.join(); 3) E porque dar um pause na thread main até que as 3 threads sejam finalizadas? qual o motivo disso?
t3.join();
System.out.println("Threads produtoras de SQLs finalizadas!");
for (int i = 0; i < 400; i++) {
if (!sqls.contains("SQL" + i)) {
// 4) Outra coisa, porque eu consigo acessar os valores de $sqls? já que os valores são de cada objeto? se eu fizesse algo parecido com uma String não iria conseguir fazer isso
throw new IllegalStateException("não encontrei a SQL" + i);
}
}
if (sqls.contains(null)) {
throw new IllegalStateException("não devia ter null aqui dentro! nao inserimos null");
}
System.out.println("Fim da execucao com sucesso"); // 5)Porque essa mensagem nunca aparece?
}
}
Irei ficar muito agredecido com as respostas para as minhas dúvidas.
Vlw pessoal.
abração