当前位置: 首页 > 面试题库 >

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

盖成弘
2023-03-14
问题内容

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

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


问题答案:

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

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

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



 类似资料:
  • 我已经用Java编写了一个简单的ECHO协议服务器,使用。 很简单: 线程正在上等待客户端的输入。但是我发现所有的工作线程都处于状态,通过,我认为它们可能处于状态。 线程在等待数据到达时被阻塞,但为什么在这里它是可运行的? 下面是输出:

  • 问题内容: 线程状态WAIT和线程状态BLOCKED有什么区别? 该Thread.State文档: 已阻止 该线程在等待监视器锁定时被阻止,处于此状态。 等待中 无限期等待另一个线程执行特定操作的线程处于此状态 没有向我解释差异。 问题答案: 线程在调用对象后进入等待状态。这称为 等待 状态。一旦线程达到等待状态,它将需要等待,直到其他线程调用或对象上。 通知此线程后,它将无法运行。可能是其他线程

  • 用例:每次我需要处理一个作业时创建一个新线程。 目前的实现:我使用的执行器服务与固定大小的线程池,例如50。对于每个作业,我都向executor服务提交一个新线程。 我试图实现的行为更像是自动伸缩。在高峰时间跨越更多的服务器(在本例中是线程)。并在负载不是很高的时候终止额外的服务器并保持最小的服务器计数。

  • 如何启动线程: 我调用关闭线程:

  • 我正在http://www.python-course.eu/threads.php的帮助下学习python线程处理。这段代码的解释让我很困惑: 代码: 读取num_thread的值 一个新的int实例将增加或减少1(我认为一个新的int对象将被创建) 将新值分配给num_threads 像这样的错误发生在增量赋值的情况下: 第一个线程读取变量num_threads,它的值仍然是0。令人困惑的是:

  • 我们在其中一个模块中使用了Hystrix-断路器模式[library]。usecase是:-我们正在从kafka轮询16个消息,并使用pararllel流处理它们,因此,对于工作流中的每条消息,它需要3个rest调用,这些调用由hystric命令保护。现在,问题是当我尝试运行单个实例时,CPU显示尖峰,线程转储显示许多线程处于等待状态,等待所有3个命令。如下所示:-