繁体   English   中英

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

[英]What happens when you invoke a thread's interrupt()?

我需要知道会发生什么

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

提前致谢。

中断一个线程是一种状态安全的方式来取消它,但是线程本身必须被编码以注意中断。 如果在该线程执行时发生.interrupt() ,则抛出InterruptedException长阻塞 Java 操作将抛出该异常。

.interrupt()方法为该线程设置“中断”标志并中断任何 IO 或睡眠操作。 它不执行任何其他操作,因此由您的程序进行适当响应并定期通过Thread.interrupted()检查其中断标志。

如果一个线程不检查中断,它就不能安全地停止。 Thread.stop()使用起来不安全。 所以你使用.interrupt()来停止一个线程,但是在编写多线程代码时,你需要确保.interrupt()会做一些明智的事情。 这篇 TechRepublic 文章是一个很好的教程。

从您之前的问题来看,我假设您对 Java 的行为感兴趣。

在 Java 中,如果线程当前正在阻塞,则会抛出InterruptedException 如果线程没有阻塞,则不会抛出异常。

有关更多信息,请查看此处:
Java文档

对于 .NET 语言,如果线程当前正在阻塞,则会抛出ThreadInterruptedException 如果线程没有阻塞,则在线程阻塞之前不会抛出异常。

请用您想要回答的语言标记您的问题。

另一个值得分享的重要信息是,线程类中有两种方法isInterrupted()interrupted() 后一个是静态方法。 isInterrupted()方法调用不会改变 Thread 类的中断属性的状态,而interrupted()静态方法调用可以将中断布尔值的值设置为 false

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM