Cómo usar notificar y esperar

¿Se puede esperar / notificar se utiliza dentro de un hilo? Soy malo que tengo un oyente y en el momento en que el oyente se llama quiero habilitar un hilo para hacer su trabajo. ¿Cómo podría hacer eso?

Mis datos se escriben en una base de datos … y se escribe cada vez que el oyente es llamado. Ahora el hilo que he creado lee los datos y lo envía a algún lugar …. A continuación … Tengo algunos otros datos Y hacer lo mismo …. El otro hilo necesita saber cuál fue el último dato que lo leyó para que pueda empezar a leer desde donde salió ….

Echa un vistazo aquí: usando esperar y notificar dentro de un hilo Así es como se ve mi problema.Thx

Tengo lo siguiente:

synchronized (syncToken) { try { syncToken.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("MyThread: " + s); 

En MyThread …. así que cuando lo hago

 MyThread t = new MyThread(syncToken); t.start(); 

Puse mi hilo en espera … ¿sí?

Y cuando hago esto:

 syncToken.notify(); 

Tengo mi hilo de nuevo en la pista …. pero la ejecución de la siguiente línea es la que después de esperar ()?

Quiero decir esto: System.out.println("MyThread: " + s); ????

Cuando se notifica a un thred no sigue su ejecución con la línea después de esperar () Thx

El siguiente es un ejemplo simple de concurrencia entre dos subprocesos diferentes. En el ejemplo, el subproceso principal inicia un subproceso MyThread y cada 3 segundos establece un dato en la instancia MyThread y luego MyThread lo imprime. La idea es tener un objeto sincronizado que usted wait en él y notify al final del uso a otros hilos que puedan usarlo:

Test.java:

 package stack; public class Test { public static void main (String args[]) { Object syncToken = new Object(); MyThread t = new MyThread(syncToken); t.start(); for (int i = 0; i < 10; i++) { try { Thread.sleep(3000); } catch (InterruptedException e) { e.printStackTrace(); } synchronized(syncToken) { t.setText("Iteration " + i); syncToken.notify(); } } } } 

MyThread.java:

 package stack; public class MyThread extends Thread{ String s; Object syncToken; public MyThread(Object syncToken) { this.s = ""; this.syncToken = syncToken; } public void run() { while(true) // you will need to set some condition if you want to stop the thread in a certain time... { synchronized (syncToken) { try { syncToken.wait(); } catch (InterruptedException e) { e.printStackTrace(); } } System.out.println("MyThread: " + s); } } public void setText(String s) { this.s = s; } } 

En este ejemplo, el subproceso principal establece una cadena (cada 3 segundos) y el subproceso MyThread lo imprime.

Adaptarlo a sus necesidades, no debería ser demasiado difícil.

Tuve un problema similar. He creado un árbitro utilizado por dos hilos (en su caso, puede ser hilo de los oyentes y su hilo de la tarea): listener:

 arbiter.waitConsumer(); // prepare data arbiter.dataLoaded(); 

Hilo de tareas:

 while(true){ arbiter.waitProducer(); // consume data arbiter.dataConsumed(); } 

árbitro:

 public class Arbiter { private boolean dataLoaded = false; public synchronized void waitProducer(){ while(!dataLoaded){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } public synchronized void waitConsumer(){ while(dataLoaded){ try { wait(); } catch (InterruptedException e) { e.printStackTrace(); } } } public synchronized void dataLoaded(){ dataLoaded = true; notify(); }public synchronized void dataConsumed(){ dataLoaded = false; notify(); }} 

El oyente y la tarea se sincronizan themselfes contra el monitor de los árbitros. Probablemente usted puede llamar a su cola árbitro o tubería y la fecha de almacenamiento para consumir en ella?

  • NDK / JNI: identificando el hilo actual
  • ¿El límite de los hilos en android?
  • Cómo evitar la señal fatal 6 (SIGABRT) en android
  • Accediendo simultáneamente a diferentes miembros del mismo objeto en Java
  • Simple Thread Management - Java - Android
  • ¿Cómo funciona el multi-threading en Android?
  • ¿Puede alguien ayudarme a entender el enhebrado de mi programa?
  • Estadísticas de descargas de fondo de Android
  • ¿Una manera fácil de detectar dónde se está bloqueando el hilo de ui en Android?
  • RxJava No puede crear el controlador dentro de hilo que no ha llamado Looper.prepare ()
  • Múltiples AudioTracks, Single Thread o Multiple?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.