Решил двумя способами и оба способа вызывают у меня недоумение:
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 Тоже непонятно, почему. Ведь если мы вызываем первый поток, и в нем пытаемся дождаться второго потока, который еще не запущен, по логике у нас должно вызываться исключение и выводиться надпись, что поток прерван. Объясните, пожалуйста, механику этих процессов.