假设我有以下代码:
while(!Thread.currentThread().isInterrupted()){
//do something
Thread.sleep(5000);
}
现在 Thread.sleep
抛出 `InterruptedException 所以它应该是这样的:
while(!Thread.currentThread().isInterrupted()){
//do something
try{
Thread.sleep(5000);
} catch(InterruptedException e){
}
}
如果我点击 catch
,while
循环会继续吗?还是我需要执行 Thread.currentThread().interrupt()
?如果我调用此方法,是否也会导致 InterruptedException
?否则我一开始是怎么得到异常的?
另外如果我有:
while (!Thread.currentThread().isInterrupted()){
//do something
callMethod();
}
private void callMethod(){
//do something
try {
Thread.sleep(5000);
} catch(InterruptedException e){
}
}
我的 while
循环会再次中断吗?
最佳答案
实际上你的问题更多的是关于 try - catch - finally
而不是关于多线程。
1) 如果sleep
抛出一个Exception
,catch
block 将执行,然后while
循环继续.
2) 你做的事情和 1) 完全一样
要离开 while
循环,请执行以下操作:
try{
while(!Thread.currentThread.isInterrupted){
//do something
Thread.sleep(5000);
}
}
catch(InterruptedException e){
}
在这种情况下,如果抛出 Exception
,则 while
循环会停止并执行 catch
block 。
关于java - 中断异常与 while 循环中的 isInterrupted,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14953409/