Dormir un hilo hasta que se asista a un evento en otro hilo
-
02-07-2019 - |
Pregunta
Tengo dos subprocesos en una aplicación de Android, uno es el subproceso de visualización y el otro es el subproceso de trabajo.Lo que quiero hacer es suspender el hilo de trabajo hasta que el hilo de vista finalice el manejo del método onDraw.
¿Como puedo hacer esto?¿Hay que esperar la señal o algo así?
Solución
Comparta un java.lang.Object entre los dos subprocesos, cuyo único propósito es indicarle al subproceso de trabajo cuándo puede continuar su trabajo.Cada vez que el hilo de trabajo llega a un punto en el que debería dormir, hace lo siguiente:
stick.wait();
Cuando el hilo de vista finaliza su trabajo onDraw, llama a esto:
stick.notify();
Tenga en cuenta el requisito de que el hilo de vista sea propietario del monitor del objeto.En su caso, esto debería ser bastante sencillo de implementar con un pequeño bloque de sincronización:
void onDraw() {
...
synchronized (stick) {
stick.notify();
}
} // end onDraw()
Consulte el javadoc para java.lang.Object sobre estos métodos (y notifique a todos, por si acaso);están muy bien escritos.
Otros consejos
Si desea una API concurrente de nivel superior (con cosas como barreras), puede probar el backport de la API concurrente de Java 5, que funciona en Java 1.3 y superior, y puede funcionar en Android.Los gustos de Object.wait/notify funcionarán, pero pueden ser un poco concisos.