Galera me surgiu uma duvida quando eu tava fazendo um simulado aqui…
Olha soh:
se eu tivero seguinte codigo:
public class TestThread {
public TestThread() {
T t1 = new T("t1");
T t2 = new T("t2");
t1.start();
System.out.println("apos t1");
t2.start();
System.out.println("apos t2");
}
public static void main(String[] args) {
TestThread testThread = new TestThread();
}
class T extends Thread {
public T(String name) {
super(name);
}
public void run() {
for (int i=0; i<20; i++) {
System.out.println(super.getName());
currentThread().yield();
}
}
}
}
O que vai acontecer eh que ele vai imprimir:
apos t1
apos t2
t1
t2
… os 2 ultimos aleatoriamente
Caso queiramos que ele imprima o apos t1 e apos t2 ao final de seus respectivos terminos deveriamos usar um join…
t1.start();
try {
t1.join()
} catch(InterruptedException ie) {}
System.out.println("apos t1");
blz isso resolve o problema.
o detalhe eh que eu usar usar:
public class TestThread {
public TestThread() {
T t1 = new T("t1");
T t2 = new T("t2");
t1.run();
System.out.println("apos t1");
t2.run();
System.out.println("apos t2");
}
public static void main(String[] args) {
TestThread testThread = new TestThread();
}
class T extends Thread {
public T(String name) {
super(name);
}
public void run() {
for (int i=0; i<20; i++) {
System.out.println(super.getName());
currentThread().yield();
}
}
}
}
Tambem resolve o problema… ateh entao pensava que os dois metodos (start e run) se comportassem da msm maneira…
Eu tava lendo na api (se eu estiver errado por favor me corrijam) uma explicacao talvez seja q o metodo start na verdade apos sua chamada tera duas threads executando concorrentemente a thread que roda esta rodando o metodo start e que retornara o resultado, e outra que executará o metodo run().
Logo como no run isso nao acontece, havera apenas uma thread (ela nao precisara concorrer e/ou perder o processo para outra thread)
Se alguem souber melhor o que ocorre nesse caso, e eu falei besteira pode postar ai…
Vlw pessoal!