Your explanation is
way more complex than it needs to be. If "t" is a Thread that hasn't completed, then "t.join()" doesn't return until t
has completed. All the rest is just unnecessary jargon.
Here's a complete program that should demonstrate this:
With the "t.join()", you'll see "In the new thread" print first, every time. Without it, you'll see "Back in main thread" first, most of the time, anyway.
Note that if you're worried about a race condition here, don't be. The possible race is that the child thread completes before join() is called -- in which case, the program works as I say it will, right? This is a safe
pattern for starting one or more threads, and waiting for them to complete before proceeding.