Это не использует события, но я уверен, что это один из многих способов сделать это.Быстрое предостережение: чтобы это работало, вам нужно будет преобразовать ваш Runnable в объект Thread или изменить интерфейс, чтобы в вашем Runnable был какой-то метод isStopped (), который будет возвращать, работает ли ваш Runnable или нет.
Возможно, родительский поток отслеживает все свои дочерние потоки в списке.Когда дочерний поток завершает работу, поместите вычисленное им значение в какое-то поле, скажем, result, и создайте метод getResult ().
Пусть родительский поток периодически перебирает список и проверяет, является ли потокостановился.Если вы приведете свой Runnable к объекту Thread, есть метод isAlive (), который сообщает, остановился ли поток.Если это так, вызовите getResult () и сделайте что угодно.
В родительском потоке вы можете сделать это:
Boolean running = true;
while (running) {
//iterate through list
//if stopped, get value and do whatever
//if all the child threads are stopped, stop this thread and do whatever
Thread.sleep(1000); //makes this parent thread pause for 1 second before stopping again
}