你能解释一下调用java.lang.Thread.interrupt()时做什么吗?
当前回答
中断是对线程的一个指示,它应该停止正在做的事情并做其他事情。由程序员决定线程如何响应中断,但是线程终止是很常见的。 一个很好的参考:https://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html
其他回答
如果目标线程一直在等待(通过调用wait(),或其他一些本质上做同样事情的相关方法,如sleep()),它将被中断,这意味着它将停止等待它正在等待的东西,而是接收一个InterruptedException。
完全由线程本身(调用wait()的代码)决定在这种情况下做什么。它不会自动终止线程。
它有时与终止标志结合使用。当被中断时,线程可以检查这个标志,然后关闭自己。但这只是惯例。
中断是对线程的一个指示,它应该停止正在做的事情并做其他事情。由程序员决定线程如何响应中断,但是线程终止是很常见的。 一个很好的参考:https://docs.oracle.com/javase/tutorial/essential/concurrency/interrupt.html
在以上回答的基础上,我想补充一两件事。
需要记住的一件事是,调用中断方法并不总是会导致InterruptedException。因此,实现代码应该定期检查中断状态并采取适当的操作。 thread. currentthread (). isinterrupted()也可以用来检查线程的中断状态。与Thread.interrupted()方法不同,它不清除中断状态。
thread. interrupt()将目标线程的中断状态/标志设置为true,当使用thread. interrupted()检查时,可以帮助停止无休止的线程。请参阅http://www.yegor256.com/2015/10/20/interrupted-exception.html
Thread.interrupt()方法设置内部的“中断状态”标志。通常该标志由Thread.interrupted()方法检查。
按照惯例,任何通过InterruptedException存在的方法都必须清除中断状态标志。
推荐文章
- 在流中使用Java 8 foreach循环移动到下一项
- 访问限制:'Application'类型不是API(必需库rt.jar的限制)
- 用Java计算两个日期之间的天数
- 如何配置slf4j-simple
- 在Jar文件中运行类
- 带参数的可运行?
- 自动化invokerrequired代码模式
- 我如何得到一个字符串的前n个字符而不检查大小或出界?
- 我可以在Java中设置enum起始值吗?
- Java中的回调函数
- c#和Java中的泛型有什么不同?和模板在c++ ?
- 在Java中,流相对于循环的优势是什么?
- Jersey在未找到InjectionManagerFactory时停止工作
- 在Java流是peek真的只是调试?
- Recyclerview不调用onCreateViewHolder