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时,为什么它继续运行?而不是放弃。这是代码,当第一次循环运行时,它会在遇到thread.sleep时打印“0”因此是一个interrupttedexception,它不应该捕获并执行S.O.P并终止?
答案 0 :(得分:0)
为什么它一直在运行?
除非您告知,否则您的计划不会终止。它通常继续运行。触发异常不会改变它。
答案 1 :(得分: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。