The join method allows one thread to wait for the completion of another.
If " t " is a Thread object whose thread is currently executing,
t.join();
Causes the current thread to pause execution until t’s thread terminates.
Overloads of join allow the programmer to specify a waiting period. However, as with sleep, join is dependent on the OS for timing, so you should not assume that join will wait exactly as long as you specify.
Like sleep, join responds to an interrupt by exiting with an InterruptedException.