Supongamos que tengo un maestro que mantiene una lista de objetos SlaveThread. En cada paso de tiempo, deseo que el maestro ejecute SlaveThreads en paralelo; sin embargo, al final del paso de tiempo, quiero que los SlaveThreads esperen entre sí para completar el paso de tiempo actual antes de avanzar. Además, no quiero reinstalar SlaveThreads en cada paso de tiempo. Tengo 2 soluciones posibles, y no sé cómo hacer que ninguna funcione:Java: sincronización de varios subprocesos según el paso del tiempo
1) El método run() en SlaveThread está en un ciclo while (verdadero). Después de la ejecución de un solo bucle en el SlaveThread, voy a tener SlaveThread notificar al maestro (que no sé cómo hacerlo), y el Maestro hace algo como
try{
for (int i = 0; i < numSlaveThreads; i++) {
while (!slaveThreads[i].getCompletedThisIter()) {
wait()
}
}
System.out.println("Joined");
}
antes avanzando al siguiente paso de tiempo. ¿Cómo haría esto? ¿Cómo puedo hacer que un solo SlaveThread notifique solo al maestro?
2) La ejecución() en Slave no está en el ciclo while (true), entonces tengo que llamar a start() en cada iteración. Pero el estado del hilo del esclavo en este punto terminará. ¿Cómo puedo llamar a start() nuevamente sin tener que volver a instalarlo?
suena como usted desea una barrera cíclica: http://docs.oracle.com/javase/7/docs/api /java/util/concurrent/CyclicBarrier.html (Usando la variante 1.) – millimoose