Ver Mensaje Individual
  #1 (permalink)  
Antiguo 05/04/2020, 19:56
Avatar de berkeleyPunk
berkeleyPunk
 
Fecha de Ingreso: febrero-2013
Ubicación: México :C
Mensajes: 565
Antigüedad: 11 años, 2 meses
Puntos: 22
Pregunta ¿Por qué MainActivity nunca se entera que mi variable fue alterada en un thread Java?

Hola, muchachos! Cada vez entiendo un poquito mejor cómo funciona el tema de los hilos (threads) en Java. Sin embargo sigo teniendo problemas. Ojalá puedan echarme una mano con esto que comento a continuación.

Pongo aquí minimizado mi código. No quiero poner el código entero de las 2 clases que menciono, porque estoy seguro que les dará flojera leerlo, y porque me parece que no hace falta ponerlo aquí para entender mi problema.

En los comentarios hallados dentro de este código, explico todo, incluyendo mi duda.

Código Java:
Ver original
  1. public class MainActivity extends AppCompatActivity {
  2.  
  3.     public static int MI_VARIABLE;
  4.  
  5.     @Override
  6.     protected void onCreate(Bundle savedInstanceState) {
  7.         super.onCreate(savedInstanceState);
  8.         setContentView(R.layout.activity_main);
  9.  
  10.         // A esta altura, el log indica que la variable MI_VARIABLE es igual a 0 (cero). Todo bien aquí.
  11.         Log.println(Log.INFO, "infor", "MI_VARIABLE: "+MI_VARIABLE);
  12.  
  13.         // Instancio e inicio un primer hilo llamado "hilo1" de una clase llamada "MiClase". La clase "MiClase" importa MI_VARIABLE así: import static com.example.miproyecto.MainActivity.MI_VARIABLE, y luego asigna el valor correspondiente a MI_VARIABLE (digamos 7). Todo bien hasta aquí.
  14.         List params1 = new ArrayList();
  15.         MiClase hilo1 = new MiClase(params1);
  16.         hilo1.setName("Hilo1");
  17.         hilo1.start();
  18.  
  19.         // Instancio e inicio un segundo hilo llamado "hilo2" de la misma clase "MiClase". Gracias al parámetro que le paso al constructor de "MiClase", este hilo2 sólo se ejecuta hasta que termine/muera el hilo1; por lo cual, cuando por fin se ejecuta el hilo2, MI_VARIABLE ya es mayor a 0 (cero). Todo bien hasta aquí.
  20.         List params2 = new ArrayList();
  21.         params2.add(hilo1);
  22.         MiClase hilo2 = new MiClase(params2);
  23.         hilo2.setName("Hilo2");
  24.         hilo2.start();
  25.  
  26.         // El problema está aquí: la condición del WHILE siempre se cumple, por lo cual la consola imprime indefinidamente: "MI_VARIABLE es igual a 0". ¿Por qué pasa esto si casi inmediatamente después de iniciada la app, MI_VARIABLE ya es mayor a 0? ¿Por qué el WHILE nunca se entera de que esto es así? ¿Qué puedo hacer para que el MainActivity.java haga algo en caso que MI_VARIABLE siga o no siga siendo igual a 0?
  27.         while(MI_VARIABLE==0) {
  28.             Log.println(Log.INFO, "infor", "MI_VARIABLE es igual a 0");
  29.         }
  30.     }
  31. }

Saludos!

Última edición por berkeleyPunk; 05/04/2020 a las 20:07