Joining a Runnable
The RWRunnable::join() function waits for a runnable to complete execution. You can join with both synchronous and threaded runnables. It is not necessary for the thread that starts a synchronous runnable to join with that runnable because the runnable has completed execution when it returns from start().
The join operation is implemented by the following functions:
void RWRunnable::join(void) RWWaitStatus RWRunnable::join(unsigned long milliseconds) A runnable can be joined by any number of threads and any number of times by the same thread.
Figure 11 shows the timing-sequence and state changes associated with the join operation.