From your current thread, you created t1 and t2 and
told the JVM to start them both. Then, with t2.join()
you paused the current thread. It will start again
when t2's run() method has completed.
From your current thread, you can also do a t1.join().
So when your thread runs again, both t1 and t2 will
have completed and you can issue a t3.start().
Jim ...
... Oh yes - and welcome to the Ranch . . .