This doesn't use events, but is just one of I'm sure many ways to accomplish this. Quick caveat: for this to work, you would need to cast your Runnable into a Thread object, or modify your interface to have some kind of isStopped() method on your Runnable, which would return whether or not your Runnable was still running.
You could have the parent thread keep track of all of its child threads in a List. When a child thread finishes, put the value it calculated in some field, say, result, and make a method called getResult().
Have the parent thread periodically iterate through the list and check to see if the thread has stopped. If you cast your Runnable to a Thread object, there's a method called isAlive() to tell if a thread has stopped. If it has, call getResult() and do whatever.
In the parent thread, you could do this:
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
}