Я читал реализацию прерывания в Java, но я не мог понять, как проходит управление?
Фрагмент кода:
public class Main implements Runnable
{
Thread t;
Main()
{
t = new Thread(this);
t.start();
t.interrupt();
if (!t.interrupted())
{
System.out.println("TRUE");
}
}
public void run()
{
try
{
System.out.println("Thread is in running state");
Thread.sleep(1000);
}
catch (InterruptedException e)
{
System.out.print(t.getName() + " interrupted");
}
}
public static void main(String args[])
{
new Main();
}
}
Насколько я понимаю, при просмотре исполняемого заказа в конструкторе должно быть:
Thread is in running state
Thread-0 interrupted
TRUE
Но это НЕПРАВИЛЬНО.
Правильный вывод:
TRUE
Thread is in running state
Thread-0 interrupted
Поэтому, пожалуйста, объясните, как работает этот порядок выполнения и почему?
Редактировать 1:
Как уже отмечалось, вызов t.interrrupted()
вводит в заблуждение, поэтому я изменил конструктор на:
Main()
{
t = new Thread(this);
t.start();
t.interrupt();
if (!Thread.interrupted())
{
System.out.println("TRUE");
}
}
Итак, теперь вывод:
TRUE
Thread is in running state
Thread-0 interrupted
Теперь вопросы,
- Поскольку поток находился в нерабочем состоянии при вызове t.interrupt (), что тогда делает t.interrupt () в этом случае?
- Почему печатается последняя строка вывода? Откуда оно получает прерывание, потому что t.interrupt был выполнен, когда поток находился в нерабочем состоянии.