Java InterruptedException挂起线程?

时间:2012-09-14 19:17:41

标签: java java.util.concurrent

这应该是任何Java Master的简单版本。我是个新手,只想确认一件事。

我有一个实现Runnable的类,和许多这样的类一样,它的run()方法有一个无限循环。我想做一些任务,然后再睡几分钟再回来。

如果在线程处于休眠状态时遇到中断异常会怎样?

我认为会发生的是线程被暂停,现在无限循环无助于保持线程运行。我想确认一下我的理解是否正确。

如果发生了这种情况,那么再次启动线程的可能解决方案是什么?

4 个答案:

答案 0 :(得分:6)

错误。
InterruptedException只会终止sleep()来电并抛出异常 只要你适当地处理异常,你的线程就会继续运行。

答案 1 :(得分:2)

您的理解大多是正确的 - 当您的线程处于休眠状态时,如果它被中断,这将导致InterruptedException被抛出 - run()中的代码必须捕获它并执行它想要做。线程本身不会被挂起 - 因为在此线程上继续执行活动。

在catch块中处理InterruptedException后,您可能希望继续执行该线程。

答案 2 :(得分:0)

线程不会被暂停。

如果你抓住InterruptedException,执行将在你的异常处理程序中继续。

如果你没有抓住InterruptedException,线程将终止。

答案 3 :(得分:0)

InterruptedExceptions不会发生。一些例外,如IOExceptions,由于介质固有的瑕疵而不可预测地发生,但中断不是这种情况。

中断是一个线程的故意信号,通常由应用程序在关闭时发送,它应该完成它正在做的事情并停止运行。如果当前正在等待或休眠的线程正在等待或正在休眠,那么线程将被唤醒,并且等待或睡眠方法会抛出InterruptedException。

java.util.concurrent和guava等有用的库使用中断来取消线程。如果您尝试将它们用于其他目的,那么您就无法使用这些库。