-2
public static void main(String s[])
{
    Thread t=Thread.currentThread();
    t.setName("main");
    try
    {
        for(int i=0;i<=5;i++)
        {
            System.out.println(i);
            Thread.sleep(1000);//interrupted exception(System provides error on its own) 
        }
    }
    catch(InterruptedException e)
    {
        System.out.println("main thread interrupted");
    }
}

`据我了解,当出现异常情况时,控件会转到 catch,实现它并离开代码。当我们使用 thread.sleep 并为 interruptedException 创建一个 catch 时,为什么它会继续运行?而不是退出。这是代码,当 for 循环第一次运行时,它会在遇到 thread.sleep 时打印“0”,因此会出现中断异常,它不应该去捕获并执行 SOP 并终止吗?

4

2 回答 2

0

只是调用 Thread.sleep 不会触发 InterruptedException。要让这段代码抛出 InterruptedException,必须在线程上调用中断。将代码更改为

public class MainInterruptingItself {

    public static void main(String s[]) {
        Thread.currentThread().interrupt();
        try {
            for(int i=0;i<=5;i++) {
                System.out.println(i);
                Thread.sleep(1000);
            }
        }
        catch(InterruptedException e) {
                System.out.println("main thread interrupted");
        }
    }
}

它会打印出来

0
main thread interrupted

这里发生的是调用中断在线程上设置中断标志。当 Thread.sleep 执行时,它会看到设置了中断标志,并基于该标志抛出 InterruptedException。

于 2016-07-20T16:47:21.277 回答
0

为什么它继续运行?

除非您告诉它,否则您的程序不会终止。它通常会继续运行。触发异常不会改变这一点。

于 2016-07-20T14:47:10.987 回答