Así que tengo un código simple que quiero imprimir el valor i 10 veces con Thread1, después de que 10 veces de Thread2 y al final, imprimir el recuento (que debería ser 20). Estoy utilizando el ".join ()", pero el resultado es excecuting momentos aleatorios de Thread1 y Thread2 y luego la suma es correcta. ¿Cómo puede es posible imprimir el primer bucle de Thread's1 y luego el Tread's2 ??
class MyClass extends Thread {
public static synchronized void incount() {
SimpleThreads.count++;
}
public void run() {
for(int i=0; i<10; i++) {
incount();
System.out.println(Thread.currentThread().getId()+" value : " + i);
}
}
}
public class SimpleThreads {
static int count=0;
public static void main(String[] args) {
MyClass thread1 =new MyClass();
MyClass thread2 =new MyClass();
thread1.start();
thread2.start();
try {
thread1.join();
thread2.join();
} catch (InterruptedException e) {
e.printStackTrace();
}
System.out.println(" Sum : "+count);
}
}
El resultado :
11 value : 0
10 value : 1
11 value : 1
10 value : 2
11 value : 2
10 value : 3
11 value : 3
11 value : 4
11 value : 5
11 value : 6
11 value : 7
11 value : 8
11 value : 9
10 value : 4
10 value : 5
10 value : 6
10 value : 7
10 value : 8
10 value : 9
Sum : 20
Usted está comenzando Thread2
antes de llamar al join()
sobre thread1
.
Es por eso que sus dos hilos se ejecutan simultáneamente y, básicamente, su unión no se afecte a los run()
de cualquier otro de los 2 hilos.
Trate de cambiar su inicio y unirse a llamar código para algo como esto;
try{
thread1.start();
thread1.join();
thread2.start();
}
No debería ser necesario llamar join()
en thread2 en este caso.