使用Thread中断方法混淆执行顺序

时间:2016-02-15 03:07:56

标签: java multithreading

我是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");
        }
    }
}

1 个答案:

答案 0 :(得分:1)

调用mt1.interrupt()后,main线程继续执行下一步。在mt1的自己的执行行中处理线程中断(即:打印&#34;线程中断&#34;)。此代码中没有任何内容可以保证在mt1线程打印之前完成main&#34;称为中断&#34;。

您可以在mt1.join()之后为mt1.interrupt()线程添加main,以等待mt1主题的完成。