这应该是任何Java Master的简单版本。我是个新手,只想确认一件事。
我有一个实现Runnable的类,和许多这样的类一样,它的run()方法有一个无限循环。我想做一些任务,然后再睡几分钟再回来。
如果在线程处于休眠状态时遇到中断异常会怎样?
我认为会发生的是线程被暂停,现在无限循环无助于保持线程运行。我想确认一下我的理解是否正确。
如果发生了这种情况,那么再次启动线程的可能解决方案是什么?
答案 0 :(得分:6)
错误。
InterruptedException
只会终止sleep()
来电并抛出异常
只要你适当地处理异常,你的线程就会继续运行。
答案 1 :(得分:2)
您的理解大多是正确的 - 当您的线程处于休眠状态时,如果它被中断,这将导致InterruptedException
被抛出 - run()
中的代码必须捕获它并执行它想要做。线程本身不会被挂起 - 因为在此线程上继续执行活动。
在catch块中处理InterruptedException
后,您可能希望继续执行该线程。
答案 2 :(得分:0)
线程不会被暂停。
如果你抓住InterruptedException
,执行将在你的异常处理程序中继续。
如果你没有抓住InterruptedException
,线程将终止。
答案 3 :(得分:0)
InterruptedExceptions不会发生。一些例外,如IOExceptions,由于介质固有的瑕疵而不可预测地发生,但中断不是这种情况。
中断是一个线程的故意信号,通常由应用程序在关闭时发送,它应该完成它正在做的事情并停止运行。如果当前正在等待或休眠的线程正在等待或正在休眠,那么线程将被唤醒,并且等待或睡眠方法会抛出InterruptedException。
java.util.concurrent和guava等有用的库使用中断来取消线程。如果您尝试将它们用于其他目的,那么您就无法使用这些库。