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();
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.