Java InterruptedException挂起线程?

问题描述 投票:3回答:4

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

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

如果在线程处于休眠状态时遇到中断异常会发生什么?

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

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

java java.util.concurrent
4个回答
2
投票

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

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


6
投票

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


0
投票

线程不会被暂停。

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

如果你没有捕获InterruptedException,线程将终止。


0
投票

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

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

像java.util.concurrent和guava这样有用的库使用中断来取消线程。如果您尝试将它们用于其他内容,则无法使用这些库。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.