Después de ejecutar hilo incrementando, variable es siempre el mismo

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 t1los acabados antes t2se 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.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=315234&siteId=1
Recomendado
Clasificación