gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-11-30 06:24:12 25 4
gpt4 key购买 nike

我正在研究 Java 中的多线程。想了解如果线程处于 BLOCKED 状态,为什么它不能被中断?而为什么线程只有处于WAIT状态才能被中断?基本上,为什么我们需要两种线程状态,一种是可中断的,另一种是不可中断的?

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

最佳答案

假设您的意思是让线程停止其当前操作并抛出一个InterruptedException? Java 中的线程中断只是一个标志。您可以在 BLOCKED 线程上调用 interrupt() 就好了,下次代码检查它时会看到该标志。

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

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

关于java - 为什么处于 BLOCKED 状态的线程不会被中断?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17141003/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com