Estoy escribiendo un código que engendrará dos hilos y luego esperará que se sincronicen usando la clase CyclicBarrier. El problema es que la barrera cíclica no está funcionando como se esperaba y el hilo principal no espera a que terminen los hilos individuales. Así es como se ve mi código:¿Cómo consigo que java.concurrency.CyclicBarrier funcione como se espera?
class mythread extends Thread{
CyclicBarrier barrier;
public mythread(CyclicBarrier barrier) {
this.barrier = barrier;
}
public void run(){
barrier.await();
}
}
class MainClass{
public void spawnAndWait(){
CyclicBarrier barrier = new CyclicBarrier(2);
mythread thread1 = new mythread(barrier).start();
mythread thread2 = new mythread(barrier).start();
System.out.println("Should wait till both threads finish executing before printing this");
}
}
¿Alguna idea de lo que estoy haciendo mal? ¿O hay una mejor manera de escribir estos métodos de sincronización de barrera? Por favor ayuda.
Sin embargo, esto lo hace sincrónico, mientras que OP parece querer un enfoque verdaderamente asincrónico. –
@Chandru: Bueno, o bien "Debería esperar a que ambos subprocesos terminen de ejecutarse antes de imprimir esto" o asíncrono. No puedes esperar asincrónicamente. –
Si lo entiendo correctamente, lo que necesita es imprimir esa línea después de que los 2 hilos completen su trabajo, lo que se puede lograr al hacerlo en la acción de barrera. De esta forma, si hay otras operaciones en el hilo actual que no dependen de la finalización de los otros 2 hilos, pueden continuar. Por cierto, yo no fui el que votó por ti. Todavía es una solución válida si todas las demás operaciones en el hilo actual dependían de la finalización de los 2 hilos. –