1. Ставить catch блок нужно потому, что метод join() throws InterruptedException
2. Метод join кидает InterruptedException в случае, если вызывающий его поток interrupted:
Thread.currentThread().interrupt();
t.join(); // will throw InterruptedException