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