Pipilm:
Im tratando de entender las discusiones. Escribí programa sencillo.
public class Main {
static int counter = 0;
public static void main(String[] args) throws InterruptedException {
Thread t1 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter++;
}
});
Thread t2 = new Thread(() -> {
for (int i = 0; i < 1000; i++) {
counter++;
}
});
t1.start();
t2.start();
t1.join();
t2.join();
System.out.println(counter);
}
}
El resultado es siempre el año 2000, pero no entiendo por qué saber. Cualquiera de los métodos de ejecución no están sincronizados ¿por qué es que me da siempre el mismo resultado.
Si escribo:
t1.start();
t1.join();
System.out.println(counter);
t2.start();
System.out.println(counter);
Entonces conseguí resultado: 1000,1000. Por eso siempre se iguala a 1000?
WJS:
Usted estés bucles son tan cortos que t1
los acabados antes t2
se pone en marcha. Trate de 100.000 en su lugar. La falta de sincronización no garantizamos que tendrá problemas de concurrencia, pero la sincronización correcta incorporación se prevenirlos.