直接引用自Java教程:
为了支持立即关闭,任务应该正确处理中断
有人能够表达这个意思吗?任务、中断和关闭方法之间的关系是什么?它是否仅意味着如果有任务正在等待某些东西,则必须抛出InterruptedException
异常?
先感谢您的帮助。
直接引用自Java教程:
为了支持立即关闭,任务应该正确处理中断
有人能够表达这个意思吗?任务、中断和关闭方法之间的关系是什么?它是否仅意味着如果有任务正在等待某些东西,则必须抛出InterruptedException
异常?
先感谢您的帮助。
想象一下您使用ExecutorService运行此任务
class Task implements Runnable() {
public void run() {
while(true) {
}
}
}
现在您想使用shutdownNow()方法关闭ExecutorService。ExecutorService将调用正在运行任务的线程的interrupt()方法,但由于任务不响应中断,它将继续运行,ExecutorService将永远无法关闭。
以下更改将使此任务可中断
while(!Thread.interrupted()) {
}
并且将允许ExecutorService关闭
interrupt
状态。可以使用Thread.currentThread().isInterrupted()
来检查。
与其他Unix调用不同的是,在Java中,您只能使用中断与其他线程通信。因此,您无法发送信号等。如果您希望通知另一个线程停止它正在做的任何事情,因为可能不需要,则通过中断该线程是一种合法的通信方式之一。false
。因此,文档要求您及时检查布尔值的状态。如果是true
,则按照惯例停止进行任何任务并退出循环或其他操作。interrupt
只是一个通知,但是在Java中,按照约定,它被视为关闭请求。您可以将此interrupt
状态视为任何您想要的内容(例如:请求发送邮件、获取数据库转储等),但不建议这样做,因为大多数内部Java库都是将其视为关闭请求构建的。What is InterruptedException for?
java.util.concurrent
包中,如果一个线程在await
、getLock
或阻塞队列等地方被阻塞,并且你中断了该线程,则该线程将解除阻塞,库会抛出InterruptedException异常来通知你该线程已被阻塞。