调用线程的中断()时会发生什么?

时间:2010-12-06 22:26:22

标签: java multithreading thread-safety

我需要知道会发生什么

  1. 什么时候睡觉?
  2. 当它正在运行时,即它正在执行给定的任务。
  3. 提前致谢。

3 个答案:

答案 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