java - 中断异常与 while 循环中的 isInterrupted

标签 java multithreading concurrency while-loop interrupted-exception

假设我有以下代码:

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){  

   }
}

如果我点击 catchwhile 循环会继续吗?还是我需要执行 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抛出一个Exceptioncatch 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/

相关文章:

java - 如何在 JavaFx 中创建自定义绑定(bind)类型

java - Gradle构建结果

java - 如何从另一个类访问填充了 asynctask 的 ListView ?

.net - 在.NET远程调用期间识别客户端

haskell - 具有超时的并发 Haskell 操作

Java 迭代器并发

java - 使用 JSON-B 反序列化 JSON 数组

java - 使用 JVMTI 进行死锁检测

asp.net-mvc - ASP.NET——启动一个线程在未来几分钟内工作?

multithreading - 在pthread中,如何可靠地将信号传递给另一个线程?