小编典典

为什么处于BLOCKED状态的线程不会被中断?

java

最近,我正在用Java开发多线程。想了解一个线程是否处于阻塞状态为什么不能被中断?为何只有在等待状态下才能中断线程?基本上,为什么我们需要两个可以被中断而另一个不能被中断的线程状态?

这个问题可能是非常基本的,但是,我试图理解事物,而不仅仅是记住它们。


阅读 507

收藏
2020-11-26

共1个答案

小编典典

有人认为您的意思是导致线程停止其当前操作并抛出InterruptedException?Java中的线程中断只是一个标志。您可以interrupt()在BLOCKED线程上调用就好了,下次代码对其进行检查时,将看到该标志。

实现这种功能的主要问题是,关键字(synchronized)应该如何引发异常?
InterruptedException是一个检查异常,必须用throws InterruptedException!声明该语言中的每个同步方法(和块),这不是一个有用的练习。

中断是一种通信工具,通常用于让线程知道需要检查的系统状态。该名称是从硬件中设置的标志继承而来的,以使微处理器知道需要检查的特定状态(例如某些输入引脚上设置的新值)。不要过多地理解“中断”这个名称,并认为它是用来破坏另一个线程中程序流的工具。它不是。因此,即使确实引发异常的方法都将其声明为已检查,其他线程也可以随意忽略它,并在需要时继续等待。能够任意中断另一个线程的BLOCKED状态将破坏程序流,这不是目的。

2020-11-26