我需要知道会发生什么
提前致谢。
答案 0 :(得分:6)
根据您之前的问题判断,我假设您对Java的行为感兴趣。
在Java中,如果线程当前正在阻塞,则会抛出InterruptedException
。如果线程没有阻塞,则不会抛出异常。
有关详细信息,请查看此处:
JavaDocs
对于.NET语言,如果线程当前正在阻塞,则会抛出ThreadInterruptedException
。如果线程没有阻塞,则在线程阻塞之前不会抛出异常。
请使用您想要答案的语言标记您的问题。
答案 1 :(得分:6)
中断线程是一种取消它的状态安全方法,但是线程本身必须编码以注意中断。如果在执行该线程时发生InterruptedException
,那么抛出.interrupt()
的Java操作将会抛出该异常。
.interrupt()
方法为该线程设置“中断”标志,并中断任何IO或睡眠操作。它没有任何其他功能,因此您的程序可以适当地做出响应 - 并定期通过Thread.interrupted()
检查其中断标志。
如果线程没有检查中断,则无法安全地停止。 Thread.stop()
is unsafe to use.所以你使用.interrupt()
来停止一个线程,但是在编写多线程代码时,你需要确保.interrupt()
做一些合理的事情。 This TechRepublic article is a pretty good tutorial.
答案 2 :(得分:0)
另一个值得分享的重要信息是,线程类中有两种方法 isInterrupted()和 interrupted()。后一种是静态方法。 isInterrupted()方法调用不会更改Thread类的interrupted属性的状态,而 interrupted()静态方法调用可以 设置将布尔值中断为false 。