我是Java新手,正在尝试学习线程中断的概念。当我运行下面的代码时,我希望在消息“被叫中断”之前打印“线程中断”消息。然而,它实际上是另一种方式。为什么会这样?
public class ThreadInterrupt {
public static void main(String[] args) throws InterruptedException {
MyThread mt1 = new MyThread();
mt1.start();
Thread.sleep(2000);
mt1.interrupt();
System.out.println("called interrupt");
}
}
class MyThread extends Thread{
@Override
public void run(){
try {
for (int i = 0; i < 5; i++){
System.out.println("from secondary thread");
sleep(1000);
}
} catch (InterruptedException e){
System.out.println("thread interrupted");
}
}
}
答案 0 :(得分:1)
调用mt1.interrupt()
后,main
线程继续执行下一步。在mt1
的自己的执行行中处理线程中断(即:打印&#34;线程中断&#34;)。此代码中没有任何内容可以保证在mt1
线程打印之前完成main
&#34;称为中断&#34;。
您可以在mt1.join()
之后为mt1.interrupt()
线程添加main
,以等待mt1
主题的完成。