当前位置: 首页 > 知识库问答 >
问题:

操作系统挂起线程和插入线程有什么区别?

米飞龙
2023-03-14

在Java中,我们可以调用interrupt()方法来中断线程,然后被中断的线程可以管理该中断(通过捕获InterruptedException,或者在检查thread.interrupted()之后)。

操作系统还可以挂起一个线程,例如,如果它想切换到另一个线程。

是否暂停和中断两个完全不同的操作?操作系统是否也可以中断线程?

共有2个答案

郜彦
2023-03-14

挂起和中断是完全对立的。Thread.interrupt()的全部目的是引起挂起的线程的注意,等待某事。

<代码>线程。中断()做两件事;

>

  • 它设置一个线程可以检查的标志。Thread.currentThread.is中断(),和

    如果线程处于任何数量的不同库调用中,这些库调用会挂起线程以等待某些内容(例如,任何文件I/O调用、线程.sleep(),我不知道还有什么),那么线程将恢复,库调用将抛出一个中断异常,而不是返回其通常的结果。

    https://docs.oracle.com/en/java/javase/12/docs/api/java.base/java/lang/Thread.html

  • 田柏
    2023-03-14

    正在暂停和中断两个不同的操作?

    正如您所描述的,这些操作是明显不同的。一个发生在Java级别,另一个发生在OS级别。

    也许你的意思是问Java线程中断是否是通过操作系统级别的线程挂起来实现的,但同样不是。正如你已经定义的挂起,这是操作系统在CPU上调度不同线程时使用的机制。当挂起的线程恢复时,它会像什么都没发生一样继续进行。但是Java线程中断的目的和效果是在中断的线程中产生不同的行为。这不是调度操作,甚至与调度也没有太大关系。

    操作系统是否也可以中断线程?

    Java使用底层操作系统设施来实现线程中断,所以从这个意义上说,是的。但操作系统本身对Java级线程语义没有任何意义,它只知道Java线程本身是通过操作系统线程实现的。没有本机工具可以在不经过Java的情况下可靠地或专门地执行Java线程中断。

     类似资料:
    • 更多面试题总结请看:【面试题】技术面试题汇总 进程是一个拥有资源和执行任务的单元体。进程拥有的资源包括:内存空间中的代码、数据等;I/O 资源;文件;处理机等。 线程是一个执行任务的单元体。线程只拥有处理机,线程之间共享进程的资源,如内存、I/O 等。 对比:   进程 线程 资源 进程是一个拥有资源和执行任务的单元体。 线程是一个执行任务的单元体,不拥有资源,线程之间共享地址空间 切换开销 开销

    • 问题内容: 进程和线程之间的技术区别是什么? 我感到像“过程”这样的词已被过度使用,并且还有硬件和软件线程。像Erlang这样的语言的轻量级进程怎么样?有确定的理由使用一个术语而不是另一个术语吗? 问题答案: 进程和线程都是独立的执行序列。典型的区别是(同一进程的)线程在共享内存空间中运行,而进程在单独的内存空间中运行。 我不确定您可能指的是“硬件”还是“软件”线程。线程是一种操作环境功能,而不是

    • 本文向大家介绍线程的 run() 和 start() 有什么区别?相关面试题,主要包含被问及线程的 run() 和 start() 有什么区别?时的应答技巧和注意事项,需要的朋友参考一下 start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。run() 可以重复调用,而 start() 只能调用一次。

    • 本文向大家介绍内核和操作系统之间有什么区别?,包括了内核和操作系统之间有什么区别?的使用技巧和注意事项,需要的朋友参考一下 操作系统 操作系统(OS)是管理计算机硬件资源并充当用户与计算机硬件之间的接口的软件集合。它为计算机程序提供通用服务。操作系统是计算机系统中系统软件的重要组成部分。 核心 内核是操作系统的核心部分,并负责该操作系统的所有主要活动。内核由各种模块组成,它直接与底层硬件交互。它还

    • 本文向大家介绍进程和线程的区别是什么?相关面试题,主要包含被问及进程和线程的区别是什么?时的应答技巧和注意事项,需要的朋友参考一下 考察点:JAVA进程 进程是执行着的应用程序,而线程是进程内部的一个执行序列。一个进程可以有多个线程。线程又叫做轻量级进程。  

    • 每个线程都是通过某个特定Thread对象所对应的方法run()来完成其操作的,run()方法称为线程体。通过调用Thread类的start()方法来启动一个线程。 start() 方法用于启动线程,run() 方法用于执行线程的运行时代码。run() 可以重复调用,而 start() 只能调用一次。 start()方法来启动一个线程,真正实现了多线程运行。调用start()方法无需等待run方法体