Dr.Y, учебник, как всегда, говорит не всю правду. Потоки в Java бывают двух видов - user thread и daemon thread
Пользовательские потоки, как и написано в учебнике, выполняются после завершения потока main, и виртуальная машина ждет завершения всех пользовательских потоков.
Потоки-демоны автоматически завершаются при завершении последнего пользовательского потока. По умолчанию, потоки создаются как пользовательские, однако любой поток можно переключить в режим демона вызовом метода 
setDaemon(true)Для того, чтобы гарантировать выполнение потока до конца, можно воспользоваться методом 
Thread.join. Этот метод блокирует вызывающий поток до завершения своего потока. В вашем примере вместо System.exit вы могли вызвать join и ждать завершения потока:
public class Main {
    public static void main(String[] args) {
        Thread thread = new Thread1();
        thread.start();
        thread.join();
    }
}