Решил двумя способами и оба способа вызывают у меня недоумение:
t1.start();
t2.start();
t1.interrupt();
Такой код почти всегда выводит:
T1 was interrupted
T2 finished
Но иногда почему-то и вот это:
T1 finished
T2 finished
Почему?! Ведь по идее первый поток не может завершиться иначе, кроме как с помощью нашего прерывания, которое должно вызывать вывод сообщения, что поток прерван.
t1.start();
t1.join();
t2.start();
Такой код выводит:
T1 finished
T2 finished
Тоже непонятно, почему. Ведь если мы вызываем первый поток, и в нем пытаемся дождаться второго потока, который еще не запущен, по логике у нас должно вызываться исключение и выводиться надпись, что поток прерван.
Объясните, пожалуйста, механику этих процессов.