java - java.lang.Thread.interrupt() 有什么作用?

标签 java multithreading

你能解释一下java.lang.Thread.interrupt()在被调用时做了什么吗?

最佳答案

Thread.interrupt() 设置目标线程的中断状态/标志。然后在该目标线程中运行的代码可以轮询中断状态并适本地处理它。一些阻塞的方法如Object.wait() 可能会立即消耗中断状态并抛出适当的异常(通常是InterruptedException)

Java 中的中断不是先发制人的。换句话说,两个线程必须合作才能正确处理中断。如果目标线程没有轮询中断状态,则中断实际上被忽略。

通过 Thread.interrupted() 方法进行轮询,该方法返回当前线程的中断状态并清除该中断标志。通常线程可能会做一些事情,比如抛出 InterruptedException。

编辑(来自 Thilo 评论):一些 API 方法内置了中断处理。这包括我的头顶。

  • Object.wait()Thread.sleep()Thread.join()
  • 大多数 java.util.concurrent 结构
  • Java NIO(但不是 java.io),它不使用 InterruptedException,而是使用 ClosedByInterruptException

编辑(来自 @thomas-porninexactly same question 的完整回答)

线程中断是一种轻推线程的温和方式。它用于让线程有机会干净地退出,而 Thread.stop() 则更像是用突击步枪射击线程。

关于java - java.lang.Thread.interrupt() 有什么作用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3590000/

相关文章:

java - java多线程中的安全构造

java - 什么是 'thread-confined' 克隆?

c# - 用定时器替换代码而不是线程 sleep

java - 使用S3作为数据库来存储和查询应用程序数据

java - Java中的时差

java - 如何获取其他设备的对端IP地址

java - 通过参数同步 Java 方法

java - 线程是否有助于提高 Java 的效率?

java - 如何访问接口(interface)中的嵌套类 B?

java - for循环在执行前读取两次