我正在研究 Java 中的多线程。 想了解如果线程处于 BLOCKED 状态,为什么它不能被中断?而为什么线程只有处于WAIT状态才能被中断?基本上,为什么我们需要两种线程状态,一种是可中断的,另一种是不可中断的?
这个问题可能非常基础,但我试图理解事物而不是仅仅记住它们。
最佳答案
假设您的意思是让线程停止其当前操作并抛出一个InterruptedException
? Java 中的线程中断只是一个标志。您可以在 BLOCKED 线程上调用 interrupt()
就好了,下次代码检查它时会看到该标志。
实现这种功能的主要问题是,关键字 (synchronized
) 应该如何抛出异常? InterruptedException
是一个已检查的异常,必须用 throws InterruptedException
语言声明每个同步方法(和 block )不是一个有用的练习!
中断是一种通信工具,通常用于让线程知道它需要检查的系统状态。该名称是从硬件中设置的标志继承下来的/向上的,让微处理器知道需要检查的特定状态(例如在某些输入引脚上设置的新值)。不要过多解读“中断”这个名称,并认为它是一种用于中断另一个线程中的程序流的工具。它不是。因此,即使确实抛出异常的方法将其声明为已检查,其他线程也可以随意忽略它并在需要时继续等待。能够任意中断另一个线程的 BLOCKED
状态会中断程序流程,这不是目的。
关于java - 为什么处于 BLOCKED 状态的线程不会被中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17141003/